C言語なら、俺に聞け! <15>

このエントリーをはてなブックマークに追加
1Dennis Ritchie
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419

推薦図書/必読書のためのスレッド PART2
http://pc.2ch.net/test/read.cgi/tech/1010312992/l50

・前スレ C言語なら、俺に聞け! <14>
http://pc.2ch.net/test/read.cgi/tech/1015286974/l50
2デフォルトの名無しさん:02/03/19 15:28
お、きたきた
3デフォルトの名無しさん:02/03/19 15:29
今田げとー
4げとー
5デフォルトの名無しさん:02/03/19 15:52
fork について聞きたいのですが、
これを使うとプログラム中に子プロセスが作られますが、自分の予想では、
その子プロセスもforkを使って子プロセスを作って、そのまた子プロセス
もforkを使って...という風に無限に続くと思ったのです。しかし
いざプログラムを組んでやってみるとどうやらforkは一回しか使われて
いないようなんです・・・ forkで作られた子プロセスはいったいどういう
動きをするのでしょうか?教えてください。
forkのあと親と同じ状態でスタート
7デフォルトの名無しさん:02/03/19 16:02
なんだぁ、>>1の名前に期待してたのに・・・
プロフィールが日下部のままなのが笑える
95:02/03/19 16:11
/*ヘッダは省略*/

int main(void)
{
pid_t pid;
char *message;
int n;

pid = fork();

switch(pid)
{
case -1:
/*エラー*/
exit(1);
break;
case 0:
message = "This is the Child";
n = 5;
break;
default:
message = "This is the Parent";
n = 3;
break;
}

for(; n>0 ; n--){
puts(message);
sleep(1);
}

/*以下省略*/

}

というようなプログラムなのですが(書籍:Linuxプログラミングより) 6さんの言ったことは
”子プロセスはforkの次の行から処理を実行する”ということで合ってますか?
ぜんてってなんだよ。アレンジにしてはひどいな。
11勉強中:02/03/19 16:12
#include <stdio.h>
static int i = 1;
extern int i ;
int main(void)
{
printf("%d",i);
return 0;
}

エラーにならないのは何故ですか?
これはどういうことでしょうか?
>>1
2ちゃんではリッチーと日下部が同列なのかよ...
子プロセスはfork()から0が帰ってきたように振る舞う。
が正しい。
「次の行から」という認識は間違っているぞ。
>>10
全て=ぜんて
このスレの慣わしです
15デフォルトの名無しさん:02/03/19 16:13
>>11
どうしてエラーになるの?
staticを外してみよう
extern int i;

は、「 i という識別子が外部スコープにあるからそいつをint型として扱ってくれよろしく。」と読め。

static int i = 1;

は、
「iというint型変数をこのスコープに宣言する。staticなんで他のファイルからは見えないからよろしく。
初期化は1で。」

と読め。

どちらも矛盾していない。


18勉強中:02/03/19 16:26
ご丁寧にありがとうございました<(_ _)>
確かに矛盾してませんね。
19デフォルトの名無しさん:02/03/19 16:26
>>17
この場合、出力している i はどっちになる?
20仕様書無しさん:02/03/19 16:27
static int i;
21デフォルトの名無しさん:02/03/19 16:32
>>20
extern で手に入れた外部の i を利用するときは?
staticとexternは名前空間が別なのか...
初めて知った。
23勉強中:02/03/19 16:36
ついでに関数などでexternalなiを使う方法は無いですか?
普通にiを使えばstaticな方を全て指すようになるから無理ですか。

そもそも外部変数を参照しようというのが設計的にしょぼいっツーか
スパゲッティの元なので、

extern int GetXXXDataI();
extern void SetXXXDataI(int i);

でも作って、他のファイルスコープにあるデータは
setter/getterを経由して参照しなさい。
2517:02/03/19 16:42
ついでにいうとお前>>22は何か勘違いをしている。
26デフォルトの名無しさん:02/03/19 16:43
>>24
禿しく同意
>>24
おれもそんな感じにオブジェクトファイルを
クラス風に見立てていつもやってるんだけど、
これって正しいやり方なのかな?
Cではよくあるやり方でないかい?
>>28
ちと安心した
30デフォルトの名無しさん:02/03/19 16:48
>>7
次スレはお前がたてろ。
面白くなければ死刑に処す。
31勉強中:02/03/19 16:49
ごめんなさい、スパゲッテエェはもう作りません。
32デフォルトの名無しさん:02/03/19 16:52
Σ(´-`).。oO(>>1の名前がリッティジャン・・・haxahaax)
static int i;
int ii;
int main()
{
 ・・・
これら二つの変数が異なるセクションに確保されるのは
言語的に決められているんでしょうか?
34デフォルトの名無しさん:02/03/19 16:59
識別子が違うし刈りの定義は0で初期化されるし
じゃなくて>>1さーん
リッチィ先生は38歳じゃないよぉ・・。
50〜60歳?いいお年だな( ;´Д`)堪らないねぇハァハァ
違いはスコープだけで、置かれる場所は同じだ。

int ii;は他のスコープからextern int ii;かなにかで参照され得るが、
static int i;は、ファイルスコープ内からしか合法的に参照されることはない。

リッチィ先生のティンポ、、ハァハァ
375:02/03/19 17:09
>>13
"子プロセスがforkを呼び出しても孫プロセスは作らずに0を返す"
と思っておけばいいでしょうか?
>>37
永遠に子供を産むことが出来ます。
子供の子供の子供の・・・
あるのはプロセスを作った方(=親)と作られた方(=子)という関係だけで、
ある子が、forkでプロセスを作ったとすれば、またそこで親と子の関係がひとつできあがる。

子がforkを呼べば、孫プロセスが作られ、孫プロセスのpidが返る。
そもそもお前らのプロセスはみんな init(0)の子なんだよ。(UNIX系限定)
実際のプログラムを作るときには
プロセスグループ、セッショングループとかが
関係してくるからStevens大先生の本を読むのが
いいよ。
おれはあんまり詳しくないから説明できない、スマソ
42デフォルトの名無しさん:02/03/19 17:19
子供は、たとえ死んでも 親が生きてる限りゾンビとして残りますよね?
親子の縁を切りたいときはどうすればいいのでしょうか?
setpgid()
ごめん、43は勘違い。うそでした。
45ちょい教えて:02/03/19 17:40
IEのバージョン6のPCユーザーにメールを送るとアクティブXが
引っかかってメールが開けないらしい。こんなことってあるの?
もし、このアクティブXをメール送信者から制御できるいい方法ってある?
465:02/03/19 17:40
>>42
どうやるんですか?ギブアップです。
wait使うとか?
>>45
わけわからん。
っていうか、ここで聞く話題なのかよ。
まずウイルスチェックすれ。
49デフォルトの名無しさん:02/03/19 18:53
誰かこのスレの過去ログ取ってる奴いないか?
いたら是非アップしてほしいのだが。
>>46
- wait()系の関数で終了を待つ
- signal()などでSIGCHLDのハンドラにSIG_IGNを設定する
- sigaction()でSIGCHLDのフラグにSA_NOCLDWAITを設定する(Linuxではダメらしい)
どれでも可。他にも方法があるかも知れない。
あ、これは子が先に死んでもzombieにならない方法だけど、親子の縁を
切るわけじゃないから子から見たppidは変わらないんだな。

>>50の後に更に子がfork()して孫を作って、子はすぐに死ぬようにすれば
残った孫はorphan processとしてinitが引き取ってくれるから、完全に
親子の縁を断ち切れるかな。
52デフォルトの名無しさん:02/03/19 19:50
仕事は子ではなく孫にやらせよう。
孫を産んですぐ死ぬ。
53デフォルトの名無しさん:02/03/19 19:57
孫は生めない
そんなときは定番のUnix Programming FAQ。

[どうすればゾンビプロセスができることを防ぐことができますか? ]
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC13

>>52
デーモン作るときの常套手段ですね。
555:02/03/19 21:16
forkは本屋で参考書を立ち読みしてきて理解しました。
"一回の呼び出しで二回帰る"こんなの自分の持っている本には書いてませんでしたよ・・・

プロセス関係のこと、なんか面白そうなのでいろいろ調べたいと思います。いろいろお世話になりました
56デフォルトの名無しさん:02/03/19 22:23
>>55
ちょっとまった!
そんなの聞いたこと無いぞ。<二回帰る
>>55
子プロセス自体はmainから始まるんじゃなくてfork()の後から
実行するってだけだよ。その時に親の使っていたメモリ領域を
そっくりそのままコピーする(厳密には最近のOSはどれも
データセクションの書き換え時に初めてコピーするようになってるけど)。
違うのはfork()の戻り値だけ。
制御系のC言語ってどんなのやるの?インラインアセンブラですか
GUIがないだけ。
だまされるな。
*や*る*こ*と*は*同*じ*だ*
>>58
ほぼ一緒。ただやたらとIOポートへのポインタを多用するだけ。
後、intが16ビットで懐かしい気分に陥ってみたり。
6158:02/03/19 23:21
>>60
ありがとうございます。ポインタですか・・・

62デフォルトの名無しさん:02/03/19 23:27
>>58
インラインアセンブラもたまに使います。
CPUのレジスタに直にアクセスする場合等。
特に割り込み関係。
OS載ってれば別だけど。
インラインアセンブラもなにもCは皮かぶったアセンブラだよ。
ポインタはCの中で特に強くアセンブラ的な要素をもったもの。

asmとcは文法は違うが近い、逆にcとc++は文法は似てるが全く別物。
64ビル・ジョブス:02/03/20 00:19
>>59
うー・・・現実ははかなり違うぞ・・・今でもROM64KB・RAM16KBなんて環境も
あるからな。
そこで、リアルタイムマルチタスクOS(ビル・ジョブス作)使ってる製品も
多いからな・・・
でも、最近はSH4だからGUIまで作っちまったよ。
>>64
ディスプレイがないのに・・・。

「0x0010000から1KBはボクちん専用VRAM〜♪」

かわいそうな人だ。
>>64
そんな小さな環境でどんなスケジューリングをやってたんですか?
>>64
( ゚д゚)ポカーン
68ビル・ジョブス:02/03/20 00:29
>>65
おまえなーSH4クラスの製品ならLCDくらい付いてる事を想像できないか?

この言葉、おまえに返すよ、
>かわいそうな人だ。
( ゚Д゚ )ポカーン
>>68
2行16文字のLCD上でGUI・・・かわいそうな人だ。
>>68
是非ともLCD付きのLSIチップを見せてください!
72デフォルトの名無しさん:02/03/20 00:36
ビル・ジョブスは叩かれる伽羅なんですか?
>>72
そうです。
このスレはビルに混じれ酢付けるアフォを見物するスレなんです。
コテハンを叩くスレはここですか。
情けない。
75ビル・ジョブス:02/03/20 00:38
>>66
15レベルプライオリティー15、リスケジューリングタイム1ms、カーネルコード8KB、
TCB(タスクコントロールブロック)のRAM容量は実装依存。
もちろん各プライオリティーキューはラウンドロビン。
処理内容はLCD制御、キースイッチ制御、ネットワーク制御、ETC.。
ですが、なにか?
>>72
いや、技術はあるから叩いてもいいんです
それを跳ね返すだけの実力がある。
みんな食い付き良すぎだYO!!
ビル・ジョブスってのは、厨房のフリしてストレス発散したくなった時に使う
共有コテハンなんだからさぁ。
と言ってみるテスト。
>それを跳ね返すだけの実力がある。
プ
>>75
ありがと
>>77
正解
・・・
82ビル・ジョブス:02/03/20 00:47
こんなカンジのソースコード書いてますが、貴様らに理解できますか?

typedef struct TCB {
UCHAR id; /* My task ID */
UCHAR pid; /* Parent task ID */
UCHAR prior; /* Task Priority */
UCHAR cond; /* Task condition */
REGS *rg; /* Registers */
int wait; /* Sleep time (1ms*n) */
void *handle; /* Waiting msg/event/semaphore handle*/
int ewmode; /* Waiting event mode */
DWORD emask; /* Waiting event mask */
DWORD cputime; /* Used CPU time */
void *isp; /* Initial stack pointer */
struct TCB *prev,*next; /* Previous/Next TCB ptr */
} TCB;

typedef struct QUEUE {
TCB *head, *tail;
} QUEUE;

QUEUE ReadyQ[SYS_PRIORITY_MAX], SleepQ;

void add_ready_queue_head(TCB *t)
{
QUEUE *q = &ReadyQ[t->prior];
t->prev = NULL;
if (!(t->next = q->head))
q->head = q->tail = t;
else
q->head = q->head->prev = t;
}

void add_ready_queue_tail(TCB *t)
{
QUEUE *q = &ReadyQ[t->prior];
t->next = NULL;
if (!(t->prev = q->tail))
q->head = q->tail = t;
else
q->tail = q->tail->next = t;
}
お前がスゴイ!のはわかったって。
84デフォルトの名無しさん:02/03/20 00:53
ビル・ジョイスはWin使いかよ。萎え〜
82のようなコードは生理的に受け付けない
さっきの環境から言ったら、pidとppidで1バイトで良さそうに
思うのですがどうでしょうか?>ビルさん
ビルは適当に検索して、それらしい単語やコードをコピペしてるだけだろ。
深いところに突っ込むと、ろくに答えないで煽り返してごまかすし。
笑いが止まらぬどころか鼻血がとまんねーよ、オイ
うわぁ、さすがビル・ジョブスさん。さすがです。
TCB制御にint直打ちやNULLマクロつかッてんの初めて見た。
突っ込むときりがないんで、とりあえず、その心意気だけは買って褒め称えるスレにでもするか。
90祭りだワッショイ!:02/03/20 01:01
真スレ勃ったばっかなのに波乱の予感・・・
ここは、ビルへのツッコミで1000を目指すスレになりました。
92ビル・ジョブス:02/03/20 01:05
>>85
idとpid・・・で1バイト?ってことは4ビットで15タスク・・・は無理でしょ。
というか拡張性無さ過ぎないか?ETC.の処理もあるし。

>>86>>87
おーおまえらよくもそこまで言ってくれたな・・・
まーいーや時間の無駄だから。
教科書通りのコード見せられてもなあ。
タスク制御なんてそこらのオタゲーPGでも書けるンだっつーの。
応用コードミセロヤ。
94執行部:02/03/20 01:10
所詮ビルに故・日下部の代わりは無理か。
次はちゃんとしたのを送るとしよう。
>>94
次の刺客は林あたりをよろしく。
せめてエスピーテーメー級の骨太のやつ頼むぜ。
97デフォルトの名無しさん:02/03/20 01:21
オイオイサガッテルヨ
ビルサンサイコー
TCB構造体には無駄があると思います。みなさんもそう思いますよね?
ビルさんの出してくれたデータ構造体の叩き台を再検討しましょう!
まずはそれから!!!次に処理。
99ビル・ジョブス:02/03/20 01:25
>>93
うーん・・・応用って言われてもなー・・・

こんなのでどう?おれの作ったメモリアロケーション(MMUなしバージョン)
だけど、文句しか言えないカワイソーナ貴様には3年がんばっても理解不可能だと
思うけど・・・

typedef struct MCB {
WORD check;
USHORT owner;
DWORD size;
struct MCB *prev,*next;
} MCB;

void *far_malloc(MCB **mh, MCB **mt, void *area, int area_max, int size)
{
MCB *m;
size = (size + (sizeof(int) - 1)) & ~(sizeof(int) - 1);
if (*mt && (size > area_max ||
(DWORD)(*mt)+((*mt)->size+sizeof(MCB)+size) >= (DWORD)(area)+area_max))
return (void*)NULL;
if (!*mh) {
*mh = (MCB*)area;
(*mh)->check = MCB_CHECK_CODE;
(*mh)->owner = Running->id;
(*mh)->size = size + sizeof(MCB);
(*mh)->prev = (*mh)->next = NULL;
*mt = *mh;
return (void*)((DWORD)(*mh)+sizeof(MCB));
}
m = (MCB*)((DWORD)(*mt)+(*mt)->size);
m->check = MCB_CHECK_CODE;
m->owner = Running->id;
m->size = size + sizeof(MCB);
m->prev = *mt;
m->next = NULL;
*mt = (*mt)->next = m;
return (MSG*)((DWORD)(m)+sizeof(MCB));
}
100ビル・ジョブス:02/03/20 01:26
int far_mfree(MCB **mh, MCB **mt, void *p)
{
MCB *m;
p = (void*)((DWORD)(p)-sizeof(MCB));
if (!*mh || ((MCB*)p)->check != MCB_CHECK_CODE) return NG;
((MCB*)p)->check = 0;
if (*mh == (MCB*)p) {
if (!(*mh = (*mh)->next)) *mt = NULL;
else (*mh)->prev = NULL;
return OK;
}
if (*mt == (MCB*)p) {
*mt = (*mt)->prev;
(*mt)->next = NULL;
return OK;
}
for (m = (*mh)->next; m; m = m->next) {
if (m == (MCB*)p) {
m->prev->next = m->next;
m->next->prev = m->prev;
break;
}
}
return OK;
}
>>99
素朴な疑問。普段からコメントは書かずにやってるの?
102ビル・ジョブス:02/03/20 01:29
>>101
ソースコードそのものが最高のコメント。
全然thread safeジャナイシヨ..
教科書通りのコードはツマラネエツゥノ
インデント汁!
105ビル・ジョブス:02/03/20 01:37
>>103
おまえアフォ?
割り込み禁止区間で動作するコードだよ!ドシロウトは黙ってな。
なにが「全然thread safeジャナイシヨ..」だよ。
テメー自身、言ってる意味分かってんのか?クソ小僧が・・・。
まじめに聞くが、メモリをページ単位で管理しようという気はないのか?

マルチタスクOS書いてるつもりだろうが、
それではアプリケーションごとに気を遣うべき項目が多すぎてやってられんぞ?
何世代も前の思想だ。

お前が凄いと思っているコードはおそらく凄くも何ともないし
教科書通りのコードなんて、誰だって読めば理解できるし書けるんだ。

そんなコード自慢するためにいままでPGやってたなら、全くの無駄足だったな。
少なくともここ20年は時代の流れに取り残されている。
107デフォルトの名無しさん:02/03/20 01:46
ビルの宿題添削スレってここですか?
あんまりビルをいじめるなよ。
テスト
110ビル・ジョブス:02/03/20 01:52
>>106
おまえもアフォか?
>MMU無しバージョン
ってわざわざ書いただろ?

まーそれはテメーが真性アフォーKって事でいーとしても、
貴様の言う「ページ単位で管理」って仮想記憶含めてって事か?
それともプロテクションって事か?
制御系界では、確かにデバッグ中はOS毎逝ってしまうシーンは
良くあるが、それはプログラム設計やデバッグ手法でカバーできる。
ユーザープラットフォームじゃないからな。
ましてやリアルタイム応答が必要な分野で「シコシコ」ページを並べ替え
してられねーんだよ。「割り込み応答300ns以内」とか約束できるか?
ちなみにP4+WindowsXPでも無理だよ。理由は分かりますか?

もう寝るから、暇なヤツはカキコしとけ!
胃の中の蛙だっけ?
RTだろうがタスク制御してるなら優先ページを決めてUICのカウントを減らすくらい、OS屋なら常識だろ。おい。
300ns程度で根を上げ点じゃネエヨ。

お前がいじってんのはOSをまねて作ったただの時分割タスク切り替えシステムだぼ家。
113デフォルトの名無しさん:02/03/20 02:06
ビルさん、>>112さん。色々と勉強になります。
飽きたから寝る。

ビルサンスゴーイ
115デフォルトの名無しさん:02/03/20 02:10
>>49過去ログあったよ。
だけどURLを貼り付けるとなぜか名無しのERRORが出る。
んーん。。
とりあえず一つだけで挑戦。
【C言語なら俺に聞け!】
http://piza.2ch.net/tech/kako/967/967985026.html
>>115
感謝! とりあえず1-6と、12 14はゲトしたYO。
後は過去ログ移行中かなあ・・・。
あ、上手くいった!!
119三村:02/03/20 03:23
>>111
食ったのかよっ!
井の中の蛙
>>117
サンクス。
取り逃した10, 11,13はhtml化待ちだーね。マターリ待つべさ…。
122Dennis Ritchie:02/03/20 12:31
Hello World!
make love!
>>123
make error:"love!" is not found.
make: *** No rule to make target `love!'. Stop.
考えることはみんな一緒w
            ヘ-+------+--+-----+ヽ_
          /:::|:::::::|:::::::::::::/::::::/::::::::::::::/:::::::/`\_
       / ̄\::::::|:::::/:::......-―――--..........__/:::::::::::::::\
   ┌ー ̄::::::::::::ヽ::|:::..-^ ̄            ^ ヽ、:::::::::\
   ヽ::::::::::::::::::::::::::::/                  \::::::::ヽ
    ヽ:::::::::::::::::::::::/             ::::       \:::::ヽ
    ヽ::::::::::::::::::/      ,,,,;;:::::::::::::::  ::::::::  ,,,,;;::'''''  \::::|_
     ):::::::::::::::|      "   __  ::::*:::::    __    ヽ:|::::ヽ
     /::::::::::::::::|       - '"-ゞ'-'  ::;;;;:   '"ゞ'-'    l::::::::ヽ
    /::::::::::::::::::|             ノ::ii:ヽ::          l::::::::::|
    |::::::::::::::::::::|            /::::;リ:::l::::         |::::::::::::|
    |:::::::::::::::::::::l           ...l::::;リ:::/::         /:::::::::::::|
    .|::::::::::::::::::::::l          . /:ア/:::        /:::::::::::::::i
    l:::::::::::::::::::::::::l          ./::`^:::::        /:::::::::::::::::/
    ヽ::::::::::::::::::::::::l         /::::::::::        /:::::::::::::::::::/
     /:::::::::::::::::::::::l        /:::::::::::::      /::::::::::::::::::::::/
     /::::::::::::::::::::::::i __-ー--=;;;::::::::::::::  ....::::/:::::::::::::::::::::::/
    ./:::::::::::::::::::::::::::i":::::::::::::::  ヾ─ 、/"ヽ:/::::::::::::::::::::::::::::l
     ヽ::::::::::::::::::::::丶::::::::::   /   il   .ヽ:::::::::::::::::::::::::::/
       \::::::::::::::::::::ヽ:::::::  /    l !    ヽ:::::::::::::::::::/
         ii::::::::::::::::::` -::-/     / .i     ヽ::::::::/
          ----- ̄丶/     lヽ       ヽ/
                /      l ^ヽ..      ヽ
                /      l   ヽ      .ヽ
               l       .l    ヽ      /
               丶      l     ヽ      .l
               ヽ      l     l     /
                ヽ___../      .ヽ---/
            うそはうそであると見抜ける人でないと
           (抜けるAAになるのは)難しい
スレ立て直すか?
129デフォルトの名無しさん:02/03/20 13:34
いたたたたたたたたたた
130デフォルトの名無しさん :02/03/20 13:39
メモ帳作りました。評価してください。
http://isweb42.infoseek.co.jp/computer/bkgm/memotest.exe
ふつーexe直リンするか?
>>130
大丈夫か?
怖くて実行できねえよ。
つーか、おまえのHPみれねえヨ。
ついでにいうとActiveXは萎えるから常にOff。
HPい変なもん貼り付けるんじゃないヨ
ハァ? SCS?? 厨房氏ねよ!!
ってなんだ・・ハッキングされてんの?
136130:02/03/20 13:57
>131-135
あなた方のIPを抜かせてもらいました。
晒されたくなければ謝罪してください。
>>136
むしろ是非晒してください。お願いします(藁

おーい、まだかー?
ウォッチ板にはっちまうか?
痛い>>136からIPアドレスを晒してもらうスレ。
ぼくじぶんのあいぴいむかしからいちどでもぬかれてみたかったんだ
142厨房:02/03/20 15:16
VC++6.0漏ってます。ソースで公開している不利ーそふとのコンパイルの仕方教えてください。
>>142
当て字がむかつくから教えない。
gcc使いなさい。./configureで一発、かもよ
145消防:02/03/20 15:30
142です。ちゃんと「垢でミック板」飼いました。おしえてちょー。
>>145
当て字がむかつくから(以下同文)
147初心者:02/03/20 15:37
VC++6.0持ってます。ソースで公開しているフリーソフトのコンパイルの仕方教えてください。
普通ソースと一緒にメイク方法を書いたファイルが有るだろう?
VC用に書かれたソースかどうか調べろ。
unix用とかBCC用だとそのままだとコンパイルできない場合もある。
150初心者:02/03/20 15:45
VCでいけるみたいですが、unix用とかBCC用だとどうすればいいのですか?
makefileがunix用に書かれてたりしたら
cygwinとかについてるmakeコマンドを使う。

makefileがBCC用に書かれていたりしたら
BSD互換のmakeかBCCのmakeを使う。

ソースプログラムがunix用だったら、
cywginのgccとかでコンパイルしてみて動くことを祈る。

ソースプログラムがBCC用だったら、
あきらめてBCCをダウンロードしてインストールする。

最後の手段は、自分でがんばってソースとmakefileを書き直す。
だ。

がんばれ。

gccのOS/2ポーティングとかやったなあ、むかし。
152初心者:02/03/20 16:05
>151さま ありがとうございました。やってみます。
つーか、PCーUNIX使いはれ。
WindowsはCの基礎を勉強するにはむいてない。
一ヶ月それで色々と試してからでも遅くない。
あ、ごめん。勉強する予定はないのね。失礼
>>150
VC持ってて、VCで行けるようなら気にするな。
unix用とかBCC用なら、unixとかBCCでmakeするんだよ。
でじゃびゅ…
自分で答えを予測する賢さと
初心者と言われぬ程度のプライドぐらいもて。
初心者と名乗らぬ程度のプライドぐらいもて。
と言いたい。
「初心者です」を恥ずかしいと思わなくなったら技術者としてお終いだな。
調べることすら放棄するのか?といいたい。
160デフォルトの名無しさん:02/03/20 16:42
もっと OS の話しろ。
ビルはコード漏洩の件について上司に見つかり、別室で待機中です。
パソコンも窓も電話もない、本ですら持ち込み禁止のアイデアルーム(自称)で
次の仕事を考えています。
162ビル・ジョブス:02/03/20 17:08
>>161
おいおい・・・おれが代表取締役だが・・・なにか?
次はシステムコールのソースでも見せてやろうか?
2ちゃんも落ちたなー・・・コード晒せるツワモノ居ないのか?
代表戸締まり役 ビル・ジョブス
ここは珍コード晒すスレではありません。
どっかの本で見たようなコードを晒すところでもありません。
何をするところですか?
C言語に関する質問をしつつアホを晒すスレです。
>>166
ここが2ちゃんで無ければ、普通に質疑応答するスレなんだろうけどな・・・
>>168
2chではどんなスレッドでもネタや煽りが欠かせないってことか。
ネタや煽りをも許容するのです。
便所の落書きレベルの掲示板に仕事の質問するようなやつがいる時代ですから。
>>170
べつにええやん。
実務でも、便所の落書きレベルのコードしか書けないヤツも居るし・・・
便所の落書きひとつで、おまえらのプロジェクトの完成に貢献できるのなら
それはそれでよいのです。
>>99
素朴な疑問

・WORD と USHORT ってなにが違うの?
・なぜ int はそのまま使うの?
・ポインタを DWORD にキャストしても大丈夫なの?
・アライメントは取らなくていいの?(8バイトとか16バイトとか)
・なぜ NULL を void* にキャストするの?
・MSG* ってなに?
>>173
・1バイトの変数か符号無しの1ビット整数か。
・WORD DWORD3をしらんのかと小一時間。
・構造体とか取ってる。
・NULL は 0とdefineされていてそのままではアドレスではないからです。
・知るか。
ビルからの愛のメッセージの詰まった構造体へのポインタにきまってんだろ。
176デフォルトの名無しさん:02/03/20 19:22
すごいアホな質問ですが、聞いてください
ファイルから一行ずつ呼び出して、その行に特定の文字列を指定した文字列に変換するプログラムを作っているところです。
strstrでサーチしてアドレスを出すところまではいったんですが、その後の変換に何をつかっていいかわかりません。

#Include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LINE_SIZE 600
#define MAX_ENC_SIZE 64

void errmsg( char *s){
puts(err);
}

int main (int argc, char *argv[]){
char line[MAX_LINE_SIZE];
int line_len;
char from_str[MAX_ENC_SIZE];
char to_str[MAX_ENC_SIZE];
FILE *fp;
int n;
char *p;
if((fp = fopen( argv[1], 'w')) == (FILE *)NULL){
errmsg("file not found\n");
return(-1);
}
strcpy( from_str, argv[2]
strcpy( to_str, argv[3]);
while( fgets( line, MAX_LINE_SIZE, fp){
line_len = strlen( line );
if((p = strstr( line, from_str)) != NULL){
このあとがわかんないっすTT
一致する最初の文字のポインタを取得してもfrom_strをto_strに置き換えるやり方がわかりません。
どなたかヒントください。
お願いします。










とりあえず、
串に色違いの団子が5つ刺さってるとしてだな、
二番目と三番目の団子を皿の上にある、これまた串に刺さったままの三つの団子と
入れ替えて、六段重ねの団子を作りたいと思ったらだなあ、
おまえならどうする?
>>177
では虎を屏風から出してください。
>>176向けに書いたんじゃないの?
>>177
串の長さが足りなくて困る。
>>180
続けよう。串の長さが足りないときはどうするんだ?
>>181
ralloc()
>>181
諦める
>>182
よろしい。さらに続けよう。
では必要な串の長さはいくつかわかるな?
>>176
元のデータ=****−/////


−を888に置き換えたい。


データ置き場=/////
*****888
1行+(置換語−検索語)
>>186
では、6段の団子を、新しい長さの串に並べてくれ。
先頭はもちろん、最初の串にあったはじめの方の二つの団子だ。



strcpy(temp,p);
*p = '\0';
strcat(line,tostr);
strcat(line,temp);
じゃあ、団子を引っこ抜かれて空になった串と、
6段重ねになった串と、二本の串が手元に残ったわけだ。

古い串は捨てて、新しい串を、お客様にお出しなさい。
190176:02/03/20 20:12
>>177-188さん
こんなにも早いスレありがとうです(゜ーÅ)
できたら報告します。
できなくても報告します(;´Д`)b
>>190
ttp://www.asahi-net.or.jp/~bx5k-wtnb/dosv/20.htm
VC用だが一番最後に置換関数がある。
>>181
先生!新しい串がありませんでした!!
193デフォルトの名無しさん:02/03/20 22:36
fopen() を使ったファイルオープンに関してなんですけど、書き込み
モードでオープンしたとき (ただオープンしただけ)、以前の内容は
即座に破棄されるのでしょうか。それとも何かを書き込んだタイミングで
初めて破棄されるのでしょうか。またそのへんの振る舞いは規格で
厳密に規定されているんでしょうか。よろしくお願いします。
規格はしらんがオープンに成功した時点で元ファイルはサイズ0になってるはずだぞ。
fcloseするまでは本当に0なのかどうかは保証されないだろうが。
195ビル・ジョブス:02/03/20 22:49
>>173
・WORD と USHORT ってなにが違うの?
WORDは16BITの値、USHORTは16BITの符号無し整数

・なぜ int はそのまま使うの?
SHとかってintのほうが効率がいーんだよ

・ポインタを DWORD にキャストしても大丈夫なの?
「ポインタの型のサイズを無視して演算したい」という意思表示。

・アライメントは取らなくていいの?(8バイトとか16バイトとか)
どこ?データならコンパイラに任せてるけど?
メモリーアロケーション?ならsizeof int;でしてるよ。
>size = (size + (sizeof(int) - 1)) & ~(sizeof(int) - 1);

・なぜ NULL を void* にキャストするの?
#define NULL (char*)0 // だから

・MSG* ってなに?
メッセージ構造体。
あーおれのOSはネットワーク透過なメッセージ通信がウリだから。

以上でいいー?
196デフォルトの名無しさん:02/03/20 22:50
>>194さん
サイズを0にしてからオープンするということでよろしいのですよね。
ありがとうです。
197176:02/03/20 23:27
>>188さんのをヒントにしてやりますた。
後ファイルへ書き込めば完成のはずです(;´Д`)b
実はこれファイル操作のプログラム書くのはじめてなんですよ。
#Include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LINE_SIZE 600
#define MAX_ENC_SIZE 64

void errmsg( char *s){
puts(err);
}

int main (int argc, char *argv[]){
char line[MAX_LINE_SIZE];
int line_len;
char from_str[MAX_ENC_SIZE];
int from_len;
char to_str[MAX_ENC_SIZE];
char temp[MAX_LINE_SIZE]; /*一時的に保存する*/
FILE *fp;
int n;
char *p;
if((fp = fopen( argv[1], 'w')) == (FILE *)NULL){
errmsg("file not found\n");
return(-1);
}
strcpy( from_str, argv[2]);
from_len = strlen( from_str );
strcpy( to_str, argv[3]);
while( fgets( line, MAX_LINE_SIZE, fp){
line_len = strlen( line );
if((p = strstr( line, from_str)) != NULL){
strcpy(temp, ( p + from_len ));
*p = '\0';
strcat(line, to_str);
strcat(line, temp);
}
              //ここらへんにfprintfつかって書きこみ
}
}

れすくれたひとありがとうございます
微妙な間違いはあるが、大体理解したようなのでよし。
199170:02/03/21 00:26
>>198
ありがとう(゜ーÅ)
200デフォルトの名無しさん:02/03/21 01:50
func(unsigned char* cIn)となっている関数の引数ってどう与えればいいの?
文字列だっていうんで、初期化時に、
 unsigned char* cIn = "hoge";
とするとコンパイラにおこられるし、
 char* cIn = "hoge";
 func((unsigned char*) hoge);
とやるとコンパイラはとおるんだけど、このキャストはなんか間違ってる気がするし・・・
201デフォルトの名無しさん :02/03/21 01:53
charの宣言って0よりうえじゃないんだっけ。
unsignedつける必要あるのかなぁ

まちがってたらスマソ
202デフォルトの名無しさん:02/03/21 01:58
>>201
私もそんな気がするんですが、なぜかこの関数ではunsignedで定義されちゃってるんで、
どうにもならないんです。
自分ではこの関数を代えられないんで、なんとかunsigned charの文字列作って
送り込まないと・・・
/JオプションでOKだったりして(w

VCならそれはおそらくMBCSを期待してるだろうから

TCHAR, TCHAR *, const TCHAR *を渡せばよい。
func(_T("文字列"));
func((LPCTSTR)cIn);
#include <stdio.h>

void func(unsigned char *ustr)
{
    printf("%s\n", ustr);
}

void main()
{
    unsigned char *hoge = "test";
    func(hoge);
}

BCC55と、VC6でコンパイル無事に通った。
見当違いしてたらすまん。

>>201
charは、処理系依存のはず。
charの符号は、処理系によって異なると思われ。
キャストでいいんじゃネーノ?この場合。
そのfuncの中身次第だけど。
206デフォルトの名無しさん:02/03/21 02:03
>>203
TCHARかぁ、なるほど。
今手元にないんでちょっと明日試してみます。
ありがとうございました。

#/Jオプションって何だろ・・・日本語モードかな?
207デフォルトの名無しさん:02/03/21 02:09
funcはunsinged charのサイズに依存した処理をしてるみたいです。

だったらunsigned shortにしといてくれれば幸せだったのに・・・
208デフォルトの名無しさん:02/03/21 02:11
>>204
あれ?うちもVC6なんですが、なにかオプションでも違うのかしら。
これもあすためしてみます。
サイズはsingnedもunsignedも同じ。
自分の指定する文字列がどっちでも同じ(0〜127の範囲)なら
そのまま通してしまうのも有りかも。

unsigned char *cin=(unsigned char *)"hoge";
では通らない?

ちなみにVC6だと、
unsigned char *cin="hoge";
では/W3までは文句言われなかった。
ただたんに拡張子が .cppなんでC++で処理されてるんだろ。
Cだったらcharの符号有り無しくらいで大げさな文句は言わない。
>>200
>>205も書いてるけど、そのキャストは間違ってない。
212204:02/03/21 02:47
>>210
お、*.cppにしたらVCが怒った。
解決法は既出なので省略。

ついでにBCCは問題なく通った。
213デフォルトの名無しさん:02/03/21 06:59
calloc関数はメモリーを確保したあとに、1バイトずつ0に初期化しているんですか?
それにしては速いと思うのですが。
実際、mallocで得た領域をmemsetで0に初期化するよりも遙かに速いです。
>>213
うちの calloc.c (FreeBSD)は
if ( (p = malloc(size)) )
bzero(p, size);
てなってた。
>>213
ttp://www.itboost.co.jp/c/c_08.php より引用
| システムに bzero 関数が存在する場合は、memset を
| そちらで置き換えたほうがプログラムが高速になります。

とのこと。
216レベル1:02/03/21 12:36
今日の昼にCを始めたんだけど、早速挫折。
printfとscanfを使って、一年の秒数を計算するプログラムを組んだけど
ありえない数字が出てくる。なんで?
#include <stdio.h>
int main(void)
{
int Days;

printf("一年は何日ですか?");
scanf("%d",&Days);

printf("一年は%d秒です。",Days*24*60*60);
return 0;
}
うるう年も考慮した俺的に渾身の作なんだけど、何がいかんのかわからん。
ネタじゃないんで、レベル1だけど誰か教えてちょんまげ。
int型に入らんのかとも思ったけど32ビットどうのこうので、有効内だと思う。
あと、void ッテ何?
>>216
Cで変数名に大文字使うのやめなさい。

で、どんな数字が出てくる?
ぱっと見変なところ無いけど。

後、voidは無しってことだ。取りあえずは。
218レベル1:02/03/21 12:47
実行すると、
13184秒って出る。
voidはまぁ気にせんでええのね。変数名は小文字が吉と。メモメモ・・・
Daysにどんな値が入っているかを調査せよ。
つーかscanfはレベル30くらいで使うもんだが。
>>218
そりゃintが16bitのコンパイラ使ってるんでは?
221レベル1:02/03/21 12:54
調査?
どうやって?レベル1なのですまそ。
printfでDaysを表示すればいいのかな?やってみる
>>221
int days -> long days;

printf("%d ->%dl
>>216
> うるう年も考慮した
ちょとワラタ。ゴメン。
で、13184 ってのは、365*24*60*60 を 2^16 で割った余り。
つまり、そのコンパイラでは int は 16ビットだということ。
Days を long に、“scanf("%d",〜”を“scanf("%ld",〜”に変えてやってみ。
224デフォルトの名無しさん:02/03/21 13:00
>>223
printfのほうだろ。
225レベル1:02/03/21 13:00
なるほど。32ビットとか16ビットとかはコンパイラによって違うのね。
LSIのフリーのを使ってるので。
ちなみにDaysを表示したら365だった。
これからlong型でやってみる。
>>218
コンパイラなに使ってんだ?
変えたほうがよくないか?
変数大文字は俺は容認だがなぁ。
228173:02/03/21 13:10
>>195
先生わかりません。

>・WORD と USHORT ってなにが違うの?
>WORDは16BITの値、USHORTは16BITの符号無し整数
う〜ん、でも
> WORD check;
> USHORT owner;
この部分の使い分けがよくわからないんです。

>・なぜ int はそのまま使うの?
>SHとかってintのほうが効率がいーんだよ
なるほど!

>・ポインタを DWORD にキャストしても大丈夫なの?
>「ポインタの型のサイズを無視して演算したい」という意思表示。
typedef unsigned char byte_t;
(byte_t*)m + size
のようにした方がポインタ安全な気がするのですが間違いでしょうか?

>・アライメントは取らなくていいの?(8バイトとか16バイトとか)
>どこ?データならコンパイラに任せてるけど?
>メモリーアロケーション?ならsizeof int;でしてるよ。
>>size = (size + (sizeof(int) - 1)) & ~(sizeof(int) - 1);
far_malloc() で得たメモリに double や long double などを格納してアドレ
スエラーが起こる処理系や、DMA 転送を行って DMA が逝ってしまうハードウェ
アがあるかもしれませんが、気にしすぎでしょうか?

>・なぜ NULL を void* にキャストするの?
>#define NULL (char*)0 // だから
(*mh)->prev = (*mh)->next = NULL;
はコンパイルエラーや警告は出ないのでしょうか?

>・MSG* ってなに?
>メッセージ構造体。
>あーおれのOSはネットワーク透過なメッセージ通信がウリだから。
far_malloc() はメッセージ構造体を専用に確保するためのものだったんですね!
229レベル1:02/03/21 13:15
でけた。
Daysもdaysに直した。
ふと疑問に思ったんだけど、int(long)型で、daysともう一つなんか変数作って
そこに入力した一年の日数を入れる必要はない?そんで
days=作った変数*24*60*60;を最後のprintf関数の前に入れる。
そんでpirntf("一年は%ld秒です",days);みたいな。
>>229
それでも良いよ。

後、

days *= 24 * 24 * 60;

と言う技も使える(あまり推奨しない)
231レベル1:02/03/21 13:19
両方動く事は確認したけど、どっちがいいとかあったら教えてちょんま
あと、できたので、教えてくれた人達ありがとう。
どっちがいいかといえばその三の

int secs;

secs = days * 24 * 24 * 60;

だろ。
そういえば、閏秒には対応しないの?
233レベル1:02/03/21 13:46
それは変数名からそれがいいってことだよね?
ようはdays以外にもういっこ変数作るが吉と。
うるう秒ってのが、俺自身理解できてないから無理。
printf("一年は%ld秒です。 閏秒がある年なら1を足してください。",days*24*60*60);
>>233
うるう秒は、気象庁が突然発表する。なので予測不可能。
>>234
ワラタ。けど現実的。
まぁ普通はそこまで必要無いわな。

ちょっと気になっただけなんだけど、過去の閏秒の情報って何処かから取得出来る?
現時点の情報なら、GPSか電波時計監視すれば出来そうなもんだけど。
>>237
ありがと。
動的に取得する方法無いかなと思ってたんだけどね。
もう少しリンク辿ってみます。
>>238
動的に取得するには、ちきゅーの軌道を精密に計算すれば良いのかも。
>>239
それで算出出来るなら、予報で何年も先まで出るでしょ。
241239:02/03/21 15:40
>>240
いやはや、まったくもって。
原子時計がいきなりずれる。
243デフォルトの名無しさん:02/03/21 16:07
ここで出されるコードってインデントが入ってなくて見にくいので、
行頭のスペースとタブを「&nbsp;」に書き換えるコード作ってみた。
どっか変なところある?

#include <stdio.h>
#include <ctype.h>

#define LINESIZE 1024
#define TABSIZE 4
#define SPACESIZE 1

int istabsp(int);

int main(void){

    char line[LINESIZE];
    int line_ptr;

    int tabsize = TABSIZE;
    int spacesize = SPACESIZE;

    while(fgets(line, sizeof(line), stdin) != NULL){
        for(line_ptr = 0; 0 != istabsp(*(line + line_ptr)); ++line_ptr){
            if(*(line + line_ptr) == '\t'){
                while(0 < tabsize--){
                    fprintf(stdout, " ");
                }
            }else if(*(line + line_ptr) == ' '){
                while(0 < spacesize--){
                    fprintf(stdout, " ");
                }
            }
            tabsize = TABSIZE;
            spacesize = SPACESIZE;
        }

        fprintf(stdout, "%s", line + line_ptr);
    }

    return 0;
}

int istabsp(int c){
    if(c == '\t' || c == ' '){
        return 1;
    }else{
        return 0;
    }
}

このレス自身もこのプログラムとおしてみた。
244243:02/03/21 16:10
いちおううまくいったみたいね。
使いたい人は使ってくれ。
っつーかお前らコード見にくいので使って下さいお願いします。
245243:02/03/21 16:17
<ctype.h> は必要なかったね。
istabsp のところで、書き直す前 isspace 使ってたときのなごりじゃ。スマソ
漏れは、コピペするときにemacsで置換してる。
247243:02/03/21 16:28
重大なバグをハケーソ。(W

最奥の while ループ(2か所)の中にある、

fprintf(stdout, " "); --> fprintf(stdout, "&nbsp;");

です。
投稿したときに "&nbsp;" が " " に変換されてしまった。
なんか最近異様にこのスレ書き込まれるのが早いですね。
Part12ですらdat落ちしてないよ。
お?   とかは大丈夫なのか。
  & "
皆逝き急いでるんだよ
251249:02/03/21 16:47
>>243
すまん便乗。どうやらいけるみたいなので、作ってみた。
先頭しか変換しない、って仕様が謎だったので全置換。
先頭以外を置換しない理由ってあるかな?

#include <stdio.h>

#define TABSIZE 4

void encode_putchar(char c);

int main(int argc, char *argv[])
{
    FILE *fp;
    char c;

    fp = fopen(argv[1], "r");

    while (1){
        c = fgetc(fp);
        if (feof(fp)) break;
        encode_putchar(c);
    }

    return 0;
}

void encode_putchar(char c)
{
    int i;
    switch (c){
        case ' ':
            printf("&nbsp;");
            break;
        case '\t':
            for(i = 0; i < TABSIZE; i++){
                printf("&nbsp;");
            }
            break;
        case '&':
            printf("&amp;");
            break;
        case '"':
            printf("&quot;");
            break;
        default:
            putchar(c);
            break;
    }
}
252デフォルトの名無しさん:02/03/21 16:50
>>248

「ビル・ジョブス と(ヤツをかまう)愉快な仲間達」が
多大なる貢献をしていると思われる。(W
>>251
だめじゃん。
254243:02/03/21 16:58
>>249

> 先頭しか変換しない、って仕様が謎だったので全置換。
> 先頭以外を置換しない理由ってあるかな?

きちんと調べてないけど、投稿時に、

「行頭のタブ」と「行頭のスペース」は削除、
「その他の場所にあるタブ」と「その他にある一個以上のスペース」はスペース一個に変換。
される模様。

その他にあるかな。

とにかく行頭のインデントさえあればいいと俺は思った。
255243:02/03/21 17:02
ちなみに、
stdin と stdout を使っているのはリダイレクトを想定してるから。

./program < hogehoge.c > hogehoge.txt

とか。
256251:02/03/21 17:04
>>253
あら…何処がダメ?俺からは無事できてるように見えるけど…。
エラーチェックとかだったら許して。

/*改良版*/
#include <stdio.h>
void f(char c){int i=4;switch(c){case ' ':printf(" ");break;case '\t':
while(i--)printf(" ");break;case '&':printf("&");break;case '"':
printf(""");break;default:putchar(c);break;}}void main(int i, char **v){
FILE*fp;char c;if((fp=fopen(v[1],"r"))!=NULL) while ((c=fgetc(fp))!=EOF)f(c);}
どうせやるならクリップボード監視しろよ
258251:02/03/21 17:05
うげ、コピーするもの間違えたすまん逝ってくる。

#include <stdio.h>
void f(char c){int i=4;switch(c){case ' ':printf("&nbsp;");break;case '\t':
while(i--)printf("&nbsp;");break;case '&':printf("&amp;");break;case '"':
printf("&quot;");break;default:putchar(c);break;}}void main(int i, char **v){
FILE*fp;char c;if((fp=fopen(v[1],"r"))!=NULL) while ((c=fgetc(fp))!=EOF)f(c);}
>>254
投稿時じゃなくてブラウザの表示時な。
HTMLをインデント整えて書けるようにそうなってるんだと思うけど。

>>256
ここ7行スレかよ!!。(w
ついでに、かちゅに組み込んでくれ。
261デフォルトの名無しさん:02/03/21 17:07
これって

a<TAB>b
aa<TAB>b
aaa<TAB>b
aaaa<TAB>b

bのカラムはそろうの?
そんなもんWEBではそろえなくてヨシ。
>>256
七行かぶれかっこわるい。
あれはあのスレでやるからかっこいいんだ。
なんで
265243:02/03/21 17:25
>>251

'"' -> '\"'

とか。
>>251 " もエスケープしないといけないんだっけ。コンパイルできたから
良いかと思ってたよ。…逝ってきます。
267243:02/03/21 17:52
>>261
「これ」ってのが何指してるのかわからんけど、
「この板」を指すものとして、実験してみた結果は以下。

a b
aa b
aaa b
aaaa b


タブ一個はスペース一個になるみたいね。

>>266
イってらっしゃい。早く帰って来てね。(W

268デフォルトの名無しさん:02/03/21 19:32
Perl なら一行で済むな・・
while (<>) { s/\s/ /g; print; }

Perl をローカルで動かせるなら
perl -e "while (<>) { s/\s/ /g; print; }" < 入力ファイル
で行けるから試してみそ。



269268:02/03/21 19:35
しもた。二重にミスってた。訂正。

Perl のスクリプトとしてファイル用意するなら。
while (<>) { s//&nbsp/g; print; }

ワンライナー
perl -e "while (<>) { s/ /&nbsp;/g; print; }" < 入力ファイル
270918:02/03/21 19:44
またミスってた・・分かってもらえるとは思うけど。

Perl のスクリプトとしてファイル用意するなら
while (<>) { s/ /& /g; print; }

ワンライナーは >>269 でいい。

鬱だな、しかし。
271仕様書無しさん:02/03/21 19:45
shでsedつかえばいっしょ
272268:02/03/21 19:53
>>271
そりゃ、あればね。
Windowsな人だったら、CGIの確認用にローカルでperl入れてる人もいるかもしれないし、
ちょっとは現実解かなと思ったのみで。
regexでなんとか置換できないかと思ったんだけど、
調べてるうちに、漏れも>>271と同じ結論に達して、結局萎えた。
  test
あ、みんなソースって でそろえてたのか…。
漏れはタブ1個=全角スペース2個でそろえてたよ…。
276275:02/03/21 21:21
&nbsp;が消えた。鬱。
ていうか、ソースをここに書き込む前にテストしろよ…
 
&nbsp
&amp;nbsp
279デフォルトの名無しさん:02/03/21 21:43
vi で %s/ / /g
してから Ctrl+A, Ctrl+V でいいじゃん。
280デフォルトの名無しさん:02/03/21 23:40
外部リンケージはプログラム全体で共有されえる。
内部リンケージは翻訳単位にユニーク。
リンケージを持たない(自動変数など)はブロックにユニーク。

でいいのですか?
>>279
>  してから Ctrl+A, Ctrl+V でいいじゃん。
こんなこと言う人はvi使いじゃないです。
vim6でmswin.vimをsourceしてたとしても邪道す。

でもおれはカーソルキーを使います。
282280:02/03/22 00:57
教えてください〜
283デフォルトの名無しさん :02/03/22 02:24
質問です。
UNIXで(他は特にためしてないですが)fopenを連続で行うと
256回目近辺で失敗してしまいます。
ディスクリプタの数は設定して増やしているのですが
fopenの数とは異なるようです。
openでfopenの代わりとなる関数を作成するしかないのでしょうか?
ソケットをそれなりに使用していると1つもfopenが成功しないという
状況が発生してしまいます・・・
OS名もっと詳しく
285デフォルトの名無しさん:02/03/22 02:28
>>284
自分へのレスと受けてよろしいのでしょうか・・・?
Solaris7です。
よろしくおねがいします。
>>285
ためしに、open()が257回以上呼べるのか調べてみるべし。
287286:02/03/22 03:55
>>286
自己レス。でもやっぱり1プロセスから開けるFDの限界は
256のような〜〜。
>>283のいう「FD増やした」てーのは、OS全体で開ける数
増やしたっつーことじゃないかな?
288仕様書無しさん:02/03/22 09:30
>>234-235
微妙に違うと思われ ヽ(;´д`)ノ
閏秒は、2秒足したり1秒引いたり2秒引いたりもするっぽい。
289仕様書無しさん:02/03/22 09:34
>>200
てか、引数の定義はともかく、内部的な処理の仕様はどうなん?
具体的に言えば、
引数の型の定義が unsigned char* なのだからして、
呼び出し側で const unsigned char* を与えちゃってるのは、どうよ?
290デフォルトの名無しさん:02/03/22 09:57
>>287
ご参考まで
http://www.minq.se/products/pureload/doc/html/gettingstarted/gettingstarted8.html
>To increase number of file descriptors allowed per
>process (256 is default in Solaris 8). Use the ulimit
>or limit command in the shell you are using to start
>manager and tasks space server. To be able to increase
>number of file descriptors to more than 1024, you must
>modify the /etc/system file:
>
># set hard limit on file descriptors
>set rlim_fd_max = 4096
># set soft limit on file descriptors
>set rlim_fd_cur = 1024
>
>These settings will increase the default to 1024 with a max
>limit of 4096.
>
>Note: The system must be rebooted to initiate changes in /etc/system.
291デフォルトの名無しさん:02/03/22 11:37
大した事じゃなんですが質問します。

よく、DWORDからWORDに落とす時など

WDORD dwBefore = 0x12345678
WORD wAfter = (WORD)dwBefore & 0xffff;

とか0xffffでANDとったりしますが
これって必要な物なのでしょうか。

取りあえず無くてもVCの場合はきちんと動きますが。
292仕様書無しさん:02/03/22 12:23
>>291
>取りあえず無くてもVCの場合はきちんと動きますが。

てか、境界はコンパイル時のオプション次第でしょ。
293287:02/03/22 13:42
>>290
おぉ、すごい。参考になりますた。
>>243 >>249
今更だけどさらに便乗。
カラムを揃えてみたけど、サイズ膨れすぎ(;´Д`)

#include <stdio.h>

#define NBSP    "&nbsp;"
#define AMP     "&amp;"

#define TABSIZE     4

int main(void)
{
    int i;
    int c;
    int space;
    int length = 0;

    while ((c = fgetc(stdin)) != EOF) {
        switch (c) {
            case '\t':
                if (length >= TABSIZE)
                    space = TABSIZE - length % TABSIZE;
                else
                    space = TABSIZE - length;
                for (i = 0; i < space; i++)
                    fputs(NBSP, stdout);
                length += space;
                break;
            case ' ':
                fputs(NBSP, stdout);
                length += 1;
                break;
            case '&':
                fputs(AMP, stdout);
                length += 1;
                break;
            case '\n':
                fputc(c, stdout);
                length = 0;
                break;
            default:
                fputc(c, stdout);
                length += 1;
                break;
        }
    }
    return 0;
}
295デフォルトの名無しさん:02/03/22 14:07
>>292
291のコードで「境界」がなんの関係があんの?
296デフォルトの名無しさん:02/03/22 14:23
WindwosXPでC言語プログラムをしていてHTMLの"SUBMIT"などのタグを取得するにはどうすればよいのでしょうか?
昔自動垢取りソフトなどがありましたがああいうものを作る場合どうすればよいのでしょうか?
"tab"キーを押せばアクティブな領域?画移動するので移動事態は特に問題ないと思うのですがタグを取得できません
ここなら”書き込む”という領域を押したようにしたいのです
>>294
#define LT "&lt;"
#define GT "&gt;"
も考慮しる!

つうか sed を使うという結論になったんでは?
298デフォルトの名無しさん:02/03/22 14:41
>>296
タグを取得ってどういうこと?
cgi getしてパースしてpostしたいんだろうが鼬飼い
イタチってこう書くのか...
301デフォルトの名無しさん:02/03/22 14:49
>>299
さん
正直意味わかりません
いたちの漢字はinfoseekの辞書で読めました...
タグ取得しなくてよいのでしょうか?
302301:02/03/22 14:51
板違い
了解です
と、言ってもどこに行けば?
探して移動します
303デフォルトの名無しさん:02/03/22 14:51
>>302
初心者板が相当
アビバ逝け
阿鼻馬池
306デフォルトの名無しさん:02/03/22 15:42
3日で300レスとは・・・
さすがリッチィだけはある。
307デフォルトの名無しさん:02/03/22 16:23
なんでGPLなソフトはpthread中心に書き換えようとしないのでしょうか?
308デフォルトの名無しさん:02/03/22 16:24
というかPC-UNIXで去年でたPOSIXをサポートするつもりはあるんでしょうか?
thread unsageな関数が沢山あるとしても、それらを扱う専用のスレッドを
用意すれば事足りると素人は思ってしますのですがどうでしょうか?
お前が書け
311デフォルトの名無しさん :02/03/22 18:44
(void*)0
これをヌルポインタとしてはいけないの?
C FAQ嫁。
それでもわからなかったらまた来い。
>>308
%nm /lib/libpthread.so.0 | grep [^_]pthread
これだけでもかなりあると思うが。
314279:02/03/22 20:59
>>281
分かったよ。じゃあ V して G して y して :new して p すれば
オーケーか? 操作的にはどちらも一瞬で出来るが。
315デフォルトの名無しさん:02/03/22 23:04
プログラム全くの初心者なのですが、Cを独学で勉強しようと思ってます。
やっぱり参考書などを見ながら勉強するんですよね?
やはり数をこなすしかないでしょうか?
いきなり32ビットのをやるより、ちゃんと16ビットのからやってくべきですよね?
>>315
んなこたーない
>>315
Win32の話と見た。
独学一番。
>>315
コンソールプログラムから始めるのが普通だな
http://pc.2ch.net/test/read.cgi/tech/1016722820/
で本探して嫁
独習C これ最強
C++やれ
 ++
322デフォルトの名無しさん:02/03/23 00:45
>>315
どうせまともなプログラマになるのは、数年先なんだから
いっそのことC#でもやったら?
323デフォルトの名無しさん:02/03/23 00:48
C言語って変数の宣言ってどうやるの?
int a;
もうちょいまじめにかく

void main()
{
int a;

a=5;

printf("%d\n",a);
};
てな感じ

つーかそれも知らないなら、ネットやってるどころじゃないぞ
326デフォルトの名無しさん:02/03/23 00:51
なに?intって? なんかの略?
記憶クラス 型 識別子;
328323:02/03/23 00:54
cやったことないから・・・
古い言語やってるもので。

a を宣言して5を割り当てて
そのあとなにしてるの?
それを知ってどうしようというのだ?
>>326
こんなところで聞いてないでK&Rを読め。
やるなら早く読め、嫌なら帰れ。
>>328
print ってゆーくらいだから 多分表示してるんだろーなー

くらいの想像力はないの?
332323:02/03/23 00:56
>>331
そんぐらい想像つくわ
厳密に聞いてんの
>>323
教えてもらっててその態度はいかがなものかと
整数(integer)型変数aを宣言し
aの領域に5をピットコピーし
書式化出力関数printfにフォーマット文字列と、
aの内容5を値で渡す。

制御は端から落ちてプログラムを抜けOSに返る。
335323:02/03/23 01:00
スマソ・・・
336323:02/03/23 01:02
printfは関数なのね。なるほど。
しかし、「制御は端から落ちてプログラムを抜けOSに返る」
このフレーズがいまいちピンとこないです。
もう少し詳しく教えていただければと・・・

そして5分が経過した
338323:02/03/23 01:08
そして6分が・・・
339323:02/03/23 01:09
そして7分が・・・・・
340デフォルトの名無しさん:02/03/23 01:09
>323
ネタだよね。
それとも天然?

334よりつっこんだ話になるとそれはもうCの話じゃない。
そういうことを考えなくてすむから高級言語というのだ。

>制御は端から落ちてプログラムを抜けOSに返る。
この表現はわしもよくわからんが雰囲気はつたわる。
341デフォルトの名無しさん:02/03/23 01:10
NetBSDのソースだけ欲しいのですがどこで手にはいるんでしょうか?
342デフォルトの名無しさん:02/03/23 01:10
ソースはカーネルのソースです、ブルドック出されても困です。
343323:02/03/23 01:11
天然でごわす。
344336 K&R呼んでね♪:02/03/23 01:12
戻り値無しの関数は制御が定義の閉じ大カッコまで行くと
勝手に制御が返る。
明示的に書くと
void main(void)
{
 int a;
 a = 5;
 printf("%d\n",a);
 return;
}
本当はmainは状態を返したほうがいいので
int main(void)
{
 int a;
 a = 5;
 printf("%d\n",a);
 return 0;
}
345323:02/03/23 01:19
voidはどういういみでせう?
お馬鹿でスマソ・・・
>>345
全部訊くつもりかよ。
そういう初歩的な質問は、レス消費してしまうので、
C言語をyahooで検索して、C言語のサイトにいった方がいいと思う
こんな夜中に急に気になったのかい?
348K&R見れつーんだよ:02/03/23 01:27
ここは1から10まで手解きしてくれるお勉強スレではありません。
自分でなんとかしろっつてんだろゴルァ( ゚д゚)
Cプログラマには
int main()派とvoid main()派がいるように思います。
int main()派の理屈はわからんでもないんですが、
void main()派の人はなぜvoid にこだわるのでしょうか?
教えてください
宗教戦争に参戦することにのみ
生きがいを見出しているからです。
351ごめんなさい:02/03/23 01:51
345だけみて書きこんでしまいました。死にます。
> int main()派の理屈はわからんでもないんですが、

int main()派の理屈を教えてください。
>>349
戻り値を返す先が無い処理系を使っているからです。
354デフォルトの名無しさん:02/03/23 03:32
>>353
例えばどんな処理系ばあるんでしょうか?
>>354
OSがないとか
356デフォルトの名無しさん:02/03/23 03:39
>>355
組み込みってmain関数から始めるんですか?

カーネルにはmain関数なんて当然ないですよね。
main関数自体OSを前提とした関数だと思うんですが
この考えは間違ってますか?
main関数そのものはカーネルにはないだろうなあ。俺の脳内妄想カーネルにはあるけど。
mainが実行開始エントリという意味上のものであるなら、
カーネルにもmainはある。
fopenでNULLが返ってきた場合もfcloseするべきですか?
必要なしです。
fclose(NULL)でクラッシュする処理系、昔あろました。
あろました。
362353:02/03/23 09:16
>>354
355正解。DSPです。
仕込めばmain以外から始める事も出来るけど、通常はmainから始まります。
実際は割り込みベクタ0から始まって、そこからmain呼んでるだけなんだけど。
fclose は成功すると 0 を返し、失敗すると EOF を返すそーですが、
失敗とゆーことは、ファイルはまだ閉じられていないんでしょーか?
そのファイルを閉じるにはどうすれば?
364デフォルトの名無しさん:02/03/23 09:44
>int main()派の理屈を教えてください
ANSIがそうなっているからだろ。
ANSIに準拠していないCなら何も返さなかったりint以外を返してもいいんだろうけど。
ついでにint main(void)か int main(int argc, char **argv)ね。

逆にvoid main()の理屈がわからんぞ。
たぶん本にそう書いてあったからというくらいだとおもうけど、、。
"w"の場合はfcloseの成功を確認する必要があるねえ。
"r"でオープンしたやつのfcloseは気にしたことないなあ。
C99ではvoid main()もありうるようですが
void main()派はC99を根拠にしてるわけじゃないに1200リッチー
mallocしてfreeしない派の理屈を教えてください。
グローバル変数使いまくり派の理屈を教えてください。
>>367
OSを信頼してるから。
>>368
大丈夫staticでスコープを限定してるし、
一つのファイルに二、三個しか関数無いから(藁
>>367
手に入れたものを手放したくないから
>>364
揚げ足取りでスマソだが、それを言うならint main(int argc, (un)signed char **argv, char **envp)だろ。
(un)signedは付けとかんと。

void main(...)ってのは、8年位前にBorland系(つってもTurbo系)の参考書で見た気がする。
あのころのBorland系って、何でもC++(自称Better C)でコンパイルしようとしてたし。
たしか明示的に書いとかないと、いきなりエラー返したんじゃないかな。返り値を返すべきとか言ってさ。

初心者さんにHello World書かせるのに、K&Rに書いてあるコードと違いすぎるのはどうかなってことじゃないか。
return 0;とかreturn (EXIT_SUCCESS);とかつけとくと、何に返してるんだ?ってことになるし。
実際、void main(void)にしてて、関数の途中でいきなりexit(0);とかしてる本もあったし。

そうゆう参考書見て書いてた奴だったら、返り値が無いときには、癖でvoid main(...)って書くんじゃないかな。
そのころからやってる奴でも、C Mag,とかでやってた奴は、ちゃんとint main(...)で書くし。
373デフォルトの名無しさん:02/03/23 12:22
>一つのファイルに二、三個しか関数無いから(藁
変数はそれでいいかも(いやよくないが)しれないけど関数はファイルスコープか全部丸見えか
どっちかしかないのに1つのファイルに関数2,3個だと。
小一時間以下略。

もっとも聞いた話では1ファイル1関数という規約を採用しているところがあったそうだ。
関数名とファイル名を合わせておいてls, dir, エクスプローラで関数一覧がでるから
便利という発想らしい。いつの時代の話なんだか。
いや、ここはボケるところなんだが・・・
いや、じゅうぶんボケになっとるが…
376デフォルトの名無しさん:02/03/23 13:16
void main() が糞

ってことを書くときちがい片岡が来襲するぞ(w
片岡ってmalloc/freeじゃなかったか?
378デフォルトの名無しさん:02/03/23 15:16
ようわからんが、void main()ってK&R第1版の影響では?
379デフォルトの名無しさん:02/03/23 16:25
>>373
1ファイル1関数、
しかもその関数は数千行におよび(以下略)

Fortranの時代の名残(くせ)かなぁともおもったです。
freeした後のNULLチェックはどうですか?
どっかでコーディング規約になってたんですが。
>>378
int main() ってのはmainを呼んだ人に値を返したいから 戻り値があるの。
わかる?

返す人がいなきゃ void main() でいーんだよ。
>>381
OSが返してほしいって言ってます。
>>382
うらやましいよ・・・OSがある環境って。
BIOSが返してほしいって言ってます。
>>380
free(p); p = NULL;
という話?
>>384
ますますうらやましいよ・・・BIOSがある環境って。
ますますうらやましいよ・・・pcがある環境って。
ますますうらやましいよ、電気が使えるなんて
ueayamashi-yo! nihongo ga nyu-ryoku dekiru nante!!
うらやましいよ生きているなんて
OSサイコー。BIOSサイコー。pcサイコー。電気サイコー。日本語サイコー。
生きてるってスバラシー!

これで、世の中にバグがなけりゃーね。
>>391
自分のバグなら直せば済む。
OSやコンパイラのバグなら、大抵は回避すれば済む。
イヤなモンには違い無いが。

それ以上に逝ってよしなのは、客と営業のワガママだYO!!
これさえ無ければ・・・
>>392
客と営業が"あんなの"なのは仕様ですので。
最近は必要なくても
int main(int argc, char *argv[])って書いてるな。
後から引数受け取らせたくなることもあるし
必要なければおとなしく0返しとけば良いし。
あ、自分用のちょこっとしたツールの話ね。
>>372
> 揚げ足取りでスマソだが、それを言うならint main(int argc, (un)signed char **argv, char **envp)だろ。
> (un)signedは付けとかんと。
ハァ? いったいどこの方言ですか? デマばらまく前に規格書くらい読め。
396ビル・ジョブス:02/03/24 21:53
あげ!
397sage:02/03/24 21:54
sage
>>394
使わない引数書いておくと警告でるじゃん。
(チェックの厳しいコンパイラだと)
>>398
警告は意味がわかっててかつ問題なければ無視していいと思うけど。
>自分用のちょこっとしたツールの話
って書いてるし。
ちょと場合が違うけどBCBでボタンのクリックイベント書くときとか
Sender使わないからって消したりしないしね。
401デフォルトの名無しさん:02/03/25 06:05
401げとずざー

ついでにage
402デフォルトの名無しさん:02/03/25 06:23
厨な質問で申し訳ないんですが、
"key value"な形式のdot-fileを舐めるプログラムの常套手段を教えてください。
定番の手法を見つけることが出来ませんでした・・・
>>402
fgetsで行取得、strtokで分解。
for i in .* ; do cut -d ... <$i ; done
405仕様書無しさん:02/03/25 09:46
>>328
「古い言語」って何だよ。どの言語なのかハッキリと言え。
C言語より古いってことか? なにを言いたいのかサッパリ判らん。

COBOL しか知らないっていうならデータ型を知らないのも
さもありなん、って感じだが、
そうでもないのなら…
よーし、おじさんが泣いちゃうぞ! ( ´Д⊂ヽウエーン
>>402

VCL使えるならTIniFileしかないっしょ!
これマジで便利よぉ!!
なんか急に落ち着いたな、このスレ。

このぐらいのすたれ具合がたまらん。(W
408デフォルトの名無しさん:02/03/26 11:25
すたれage
Cはそろそろ終わりですかな
なんちゃって
C#の件をMSDNの最新号で読んだのでいるのですがMSはじゅんすいなCをもう見ていないのですね
410仕様書無しさん:02/03/26 15:53
>>409
「MSはじゅんすいなCをもう見ていない」なら、
MSのほうが終わっちゃったのではないか、と小一(略)
glibcライブラリの関数とダブった名前の自作関数を使ったら、
ld にダメだ死されたんですが、
gcc で自作関数の方を優先してリンクするにはどうやったらいいですか?
412仕様書無しさん:02/03/26 17:05
>>411
マクロで一方の名前を変える。
セマフォってどういう場合に役に立つのですか?
ロックファイルで十分だとおもうのですが・・・
ロックファイルの何百倍も速くて確実。
ロックファイルはmutexの替わりにしかならない。
しかもスレ違い。
■■ 究極のCコンパイラ C± (void)C ■■

Cコンパイラの新しい動きとして、ANSIの規格案とCにクラスの概念を持ち込んだものが
注目されている。今回、Letace社から発売されたC±は、今までのCと違うかのように見せかけながら、
ちっとも変わらないという点がいままでのCと違う部分である。一方、(void)Cコンパイラは、ANSI規格
をオブジェクト出力にまで適応しオブジェクトをまったく出さないのでコンパイル時間が事実上ゼロと
いう高速なコンパイラとなっている。
418デフォルトの名無しさん:02/03/27 08:58
>>417
有料コンパイラなんかいらん。
>>417
それ、昔のパロディ版アスキーのネタでしょ? (笑)
Letace社(多分Latice社のパロディ)ってのが時代を感じさせるのう…。
■■ 奇病「WAIDS」全米に蔓延 ■■

米国では現在、ハッカーの間で「WAIDS」と呼ばれる奇病が広まりつつあるという。この病気、別名「ウィンドウ症候群」と呼ばれ、
「最近の高性能マシンに変態的とも言える愛慕の情をだくあまり、ひどい時には死ぬ場合もある」(スピアチャッカー・ジョーンズ・
セロニアス・モンク、ニューヨーク市マッシュ病院コンピュータ病理学ソフトウェア教授)とのこと。「マルチウィンドウズ!」と口
走るのが初期症状とみられており、病状が進行すると車のワイパーを見ただけで視覚神経が萎縮してその場に倒れたり、ホテルなどの
自動ドアに土下座したりといった発作が起こるという。さらに末期になると、「マルチジョブ!」と叫びながら二つの全く異なった動
作をし始めるという。治療にあたってモンク教授は「多くのソフトが発達して、マルチウィンドウが普通のものになれば自然に消滅す
るはず……」とWAIDSに楽観的だが、コンピュータの進歩に伴って第二、第三のWAIDSが発生することも考えられ、日本に上陸する可能
性と合わせて今後も予断を許さない。
そんなあなたに処方箋

昔のPC:Ah!Ski の想い出
http://pc.2ch.net/test/read.cgi/i4004/1008819977/
>>420
わからなくもない。
423デフォルトの名無しさん:02/03/28 05:56
おいお前ら!
質問はねーのかよ!!
なんでこんな時間に書き込んでいるんですか?
>>424
あと1時間後に納品チェックが始まるのにバグが見つかったから
426初心者:02/03/28 09:16
アプリケーションヘッダーってなんですか?
使用スタック領域のことがかいてあるって聞いたんですけど
>>426
なんだろうねぇ。
どこでその言葉聞いたの?>アプリケーションヘッダ
くらぇ! 「アプリケーション・ヘッダァーーーッ!」

スタンド攻撃ですか?
オラオラオラオラオラオラオラ〜〜!!!
430初心者:02/03/28 14:57
某プログラムサイトの掲示板で
無駄無駄無駄無駄無駄無駄無駄無駄ぁぁぁ!!!!
>>427
UDP/IP の件でなければ
ロードモジュールの話だろう。
昔はパソコンと呼ばずにマイコンって読んでたの?
パーコンと読んでいました。
>>433
漏れの始めた頃はマイコンと呼ばれていた。
パソコンって呼び方が出てきた時、すげー違和感有ったよ。

って全然スレ違いだ( ゚Д゚)ゴルァ!
http://pc.2ch.net/i4004/
ここでも逝け。
436デフォルトの名無しさん:02/03/29 00:31
質問。

typedef union
{
struct
{
unsigned char R;
unsigned char G;
unsigned char B;
unsigned char A;
};

struct
{
unsigned int Gray;
};

struct
{
unsigned int Bin;
};
} PIXEL;

これで

const PIXEL PRGB_BLACK = {0, 0, 0, 0};

ってやりたいんだが無理で、

const PIXEL PRGB_BLACK = {0};

これだったら通る。RGBAので初期化したいんだがどうすればいいのでしょう。
共用体は最初のメンバなら初期化できるってCFAQに書いてあったんだけど……
コンパイラはBorland C++ Compiler 5.5
コンパイラがダメなだけかなあ
437およよ:02/03/29 00:51
共有体とは何ぞや?
無責任な発言ですが、キャストする、とか。
439デフォルトの名無しさん:02/03/29 01:10
>>436
共用体を使わない。
440ビル・ジョブス:02/03/29 01:12
質問の根幹からどれるけど、
どうしても、宣言と同時に初期化する必要あるんだ?
ちなみにGDI+だとARGBだよ。
441ビル・ジョブス:02/03/29 01:13
スマソ。
質問の根幹からそれるけど、
どうしても、宣言と同時に初期化する必要あるんだ?
ちなみにGDI+だとARGBだよ。
質問の根幹からどれるけど、
どうして二重投稿なんだ?
443436:02/03/29 01:29
GDI+とかとは関係ないライブラリを作ってるんよ。

んで、
DrawLine(int x1, int y1, int x2, int y2, const PIXEL pixel);
って関数があるもんで、黒とか白とかは定義済みのやつを渡したいなあと。
そして、それはライブラリのコードの中に封じ込めたいんで、宣言後初期化するとなると、
初期化関数でもよばせるしかない。それはちょっとかっこわるいんで、できれば宣言と同時に初期化したいのです。
>>436
#pragma pack(push, 1)
typedef union {
 DWORD RGBA;
 DWORD Gray;
 DWORD Bin;
 struct {
  BYTE R, G, B, A;
 };
} PIXEL;
#pragma pack(pop)
#define PIXEL_RGBA(r, g, b, a) {( (a << 24) | (b << 16) | (g << 8) | (r) )}

PIXEL pix = PIXEL_RGBA(1, 2, 3, 4);

こうしちゃだめなん?
445436:02/03/29 02:09
>>444
なるほど。素晴らしい。
どうもありがとうございます。
>>436
いわゆる無名構造体は処理系の拡張機能なのだが、
先頭にダミーを置いてやればbccでも通る。

typedef union
{
 struct {unsigned char R, G, B, A;} dummy;
 struct {unsigned char R, G, B, A;};
 unsigned int Gray;
 unsigned int Bin;
} PIXEL;
447436:02/03/29 03:30
>>446

構造体に名前つけないのは拡張機能なのですか……
全然しらんかった。
サンクスです〜
>>446
てか、この場合わざわざ無名にする意味がわからん。
おしえてください。おながいします。
449デフォルトの名無しさん:02/03/29 16:35
GCCでmath.hに掲載されている関数を使うにはどうすればいいのですか?
普通にコンパイルしても使えませんよね?
オプションが必要なのでしょうか?

もう一つ質問させてもらいます。
無償の統計用のライブラリってありますか?
gcc -lm
>>449
普通に
#include <math.h>
ってやっても、何故使えないんだろう?
                         (((( ;゚д゚)))ガクガクブルブル
>>451
なぜ震えてる(藁

>>449
>>450 が正解
453デフォルトの名無しさん:02/03/29 17:53
ありがとうございました。
みなさんはlibm.aというライブラリがある事をどうして知っているのですか?

とても不思議です。常識じゃないですよね?
man gccでもでてこないし。
454デフォルトの名無しさん:02/03/29 17:59
>>453
大学1年のときに教官から教わった。
455デフォルトの名無しさん:02/03/29 18:08
スレッドを使うときは
-pthread
とかこういうのはマニュアル読むしかないよ
ぐぐった
457デフォルトの名無しさん:02/03/29 18:24
>>453
以前ここで見た(ワラ
>>453
いや常識だと思う。マジレス
いや常識かどうかという問題じゃないと思う。マジレス
460459:02/03/29 20:31
あ、何でもない。逝ってくる
gcc使い始めたら、たいていは通る道だと思うから、
そういう意味で常識に1票。
nmでgrepすればわかるじゃん。
463デフォルトの名無しさん:02/03/29 23:24
man gccじゃわからんだろう。
man sinならわかるかもよ。
464デフォルトの名無しさん:02/03/30 00:10
man sinでもでてこないですね。
まぁこれはガキ大将から一人エッチを教えてもらうのと同じなのかも。
メーリングリストとか掲示板とかチェックしてたら、
一回くらい目にするんじゃないの?
>>1にあるFAQにも載ってるし。
man ld
467デフォルトの名無しさん:02/03/30 01:46
どなたかリングバッファの実装(非同期書きこみ、非同期読み出し)についての
実例や詳細解説文献等について教えてくれませんかぁ?
初歩的な質問ですみません。
ドライブ内やディレクトリ内にある、全てのファイル名を取得するには
どのようにコーディングしたら良いのでしょうか?
ご回答よろしくお願いします。
それはC言語の範疇じゃない。
環境書かないと。
>>468
一応マジレスしとくと
readdir()とかFindFirstFile()とか調べれ
471468:02/03/30 02:47
すみません、Windows環境です。
サブディレクトリ内のファイル・ディレクトリ名も取得したいのですが...
よろしくお願いします。
472468:02/03/30 02:48
>>470
ありがとうございました。
ちょっと調べてみます。
>>468
禿しくガイシュツな気がするが・・・
man opendir
Windows環境ならたぶんちがうな。UNIXしか触らんので
識者求む。
>>447
無名共用体はC++の標準機能だけど
ここはC言語スレだから拡張機能でいいのか
無名共用体は標準だけど無名構造体は非標準
477デフォルトの名無しさん:02/03/30 18:48
おいROMっている奴、質問はないのか?(怒)
>>477
怒るなよ。マターリと質問を待とうぜ。
479デフォルトの名無しさん:02/03/30 20:12
>>477
ではひとつ。

関数ポインタの配列を使ったリフレクションもどきのコード
を教えてください。とりあえずテンプレートになりそうな
疑似コードで結構です。

まずはイディオム的に覚えたいのです。
リフレクションという機能をご存知でしょうか。リフレクションとは,クラス・インタフェイス・オブジェクトに関する情報を取得するための仕組みです。
リフレクションは,Javaプログラムの開発ツール(クラスブラウザ・デバッガ・GUIデザイナなど)を作るときに欠かせない機能です。
>479
void *TMyClass_GetMethodAddress(const char *MethodName)
みたいのをすべてのクラス(というか構造体)に対して作れば
JavaやRubyなんかのリフレクションは超簡単に実装できるよ。
でもすべて手動で書かないといけないので面倒極まりない。
K&Rの演習をやってたんですが、

printf("signed char min = %d\n", -(char)((unsigned char) ~0 >> 1));
printf("signed char max = %d\n", (char)((unsigned char) ~0 >> 1));
printf("unsigned char max = %u\n", (unsigned char) ~0);

ってやると上から1、-1、65535になるのは何が悪いのでしょうか?
gcc 2.96 でやってみた
signed char min = -127
signed char max = 127
unsigned char max = 255
になった。
484デフォルトの名無しさん:02/03/31 06:20
bcc5.5、vc++6で >>483 と同じ結果になった。
485デフォルトの名無しさん:02/03/31 07:45
C言語は永久に不滅です。
>>483-484
コンパイラ変えたら上手くいきました。
ありがとうございます。
>>486
どのコンパイラ使ってたんだ?
>>487
LSIC-86 Ver3.30c 試食版です。
ところで、signed charの最小値は-128ね。
490デフォルトの名無しさん:02/03/31 15:36
>>489
1の補数なら127だYO!
491490:02/03/31 15:36
×127
○-127
試食版っていうネーミングは好きだなぁ(独り言)
493 :02/03/31 16:41
floatを高速にintに変換する方法を教えろ!
高速にだぞ
float f;
int i = *(int*)&f;
>>494
DQNでごめんなさい。
なんでそれだと早いの?なんかおもいっきしプロ技に見えるのは俺だけ?

んなことしたら正常な値がとれないぞ。
http://www.stereopsis.com/FPU.html
ネタだろう。。。
>>490
ANSI−Cは2の補数を保証してるYO!
499デフォルトの名無しさん:02/04/01 01:06
Cプログラマ必読のWEBページってありますか?
ライブラリが集結したようなのとか?
500500get:02/04/01 01:11
⊂(ΦωΦ⊂ )⊃≡フフフ・・
501デフォルトの名無しさん:02/04/01 01:12
code projectとか。
503デフォルトの名無しさん:02/04/01 01:18
ttp://www.codeguru.com/

これのC言語版みたいなページがあればお願いします。

#自分がVC++プログラマだった時にこのページを知っていたら
人生が変わっていたと思う。

今はUnixプログラマ
504nanashi:02/04/01 01:48
void ex(void)
{
int a;

printf("1or2を選択 : ");
scanf("%d", &a);

switch(a){
case 1: printf("1");
break;
case 2: printf("2");
break;
default: printf("1か2を選択\n");
ex();
}
}

こういうswitchの使い方はありですか?
マア イインジャネーノ。
switch使ってもいいこんなくだらないことで再帰するな
こういう場合再帰ではなくループで書くのが定石
それからscanfの戻り値をちゃんとチェックしとけよ
ctrl+Zとかctrl+Dで無限再帰であぼーんキボンヌ。

ホストでコレやればCPU使いまくりで課金で逝けるな。
509nanashi:02/04/01 01:56
ループですか 分かりました
こんな時間にレスありがとうございました
>>498
してないYO!
でたらめ言うなYO!
負数の内部表現は処理系依存だYO!
>>504
というか、この場合switch以外を使うメリットが感じられないのだが。
>>504
whileならどうよ。スキーリすんじゃねぇの?
あれで再帰を使うとは。。。schemerだな?
末尾再帰マンセー!
do-whileの典型じゃないの?
516デフォルトの名無しさん:02/04/01 18:43
定期age
517デフォルトの名無しさん:02/04/01 23:22
long(a+b)とlong a + long b の違いを教えていただけないでしょうか?
マルチポストね。
どうりで。
519デフォルトの名無しさん:02/04/02 00:09
ANSIのC規格書はどこにありますか?
>>519
当然の事ながらANSIに有るそうだけど、有料との事。
ガビ━━(゚д゚;)━━ン
有料ナンレスカ・・・(ノД`)
つか、ANSIは規格書が大事な収入源。
523520:02/04/02 00:46
>>519,521
C-FAQの5.2参照。
524520:02/04/02 00:47
スマソ. 11.2。
Cでリフレクション実装したいって、喧嘩売ってるとしか思えない・・。
526デフォルトの名無しさん:02/04/02 10:21
喧嘩age
つか、意味無いじゃん。
528デフォルトの名無しさん:02/04/03 14:14

struct kozotai {
int i;
char c;
};

struct kozotai kozo;

と定義したとき、
kozo.cはメモリー上でkozo.iのすぐ後にくることは保証されていますか?
529デフォルトの名無しさん:02/04/03 14:35
>528
保証されていません。
メモリ上でパディング(詰め物)がある場合がありそれは実装依存です。
>>528
隙間あるってのもあるけど、順序が逆になっていてもおかしくはない。
メンバーの順序が保証されてなかったら、シリアライズがめんどーじゃん。
>>531
そういうもんだからしかたない。
>>531
つーか、シリアライズのためには
バイト境界を弄る (C言語の範疇外。コンパイラの起動オプションや
#pragma で設定)とか、隙間をパディングするとか、
初期化と参照時に一工夫が必要であるとか、
また union を使うといった技術を併用することが必要。
しかもプラットフォーム依存。

だからといって、C言語だから面倒だというのはおそらく不当な謂いで
あり、COBOL の人などに聞かせてごらんなさいよ、
ここいらの話を、あぁた。
シリアライズってなんですか?
C FAQにもメンバをひとつずつ保存するのが一番移植性高いって書いてあるしね。
536デフォルトの名無しさん:02/04/03 21:28
>>530
K&Rのp.265には、
「構造体のメンバーは、宣言の順序に増えていくアドレスをもつ」
と書いてあるんですが…。
>>536
そうだね。
ごめん。かんちがいしてた。
538デフォルトの名無しさん:02/04/03 22:53
win9x系のOSで配列の範囲を超えて値を書き込んだりして、
OSごと逝ってしまうってことはありえるの?

普通のアプリではあまり無いが、できないことはない。
#include <stdio.h>

void main()
{
    struct{
        char c;
        int n;
    }a;
    printf("%d\n", sizeof(a.c));
    printf("%p, %p\n", &(a.c), &(a.n));
}
---
1
0012FF84, 0012FF88
---
まあ、普通はこうなるだろな。多少開きができてる。
541デフォルトの名無しさん:02/04/03 23:15
ABIって何ですか?
こっちが聞きてーよ
543デフォルトの名無しさん:02/04/03 23:44
>win9x系のOSで配列の範囲を超えて値を書き込んだりして、
>OSごと逝ってしまうってことはありえるの?
ある。

というのはメモリ上のクリティカルな部分を破壊することがあり得るから。
たとえばカーネルそのものとか大事な環境変数とかを書き換えてしまうと
OSごと死ぬだろう。
といってNT系が全く大丈夫と言うわけではない。だが9.x系に比べたら天と地の差だ。
>>542
ウケタ(w
>>542
ワラタ・・・
>>543
(´−`).。oO( ハゲドー )
数MBも書き込もうとすると、とんでもないことに ,,,ヽ(;´д`)ノ
この板って5行プログラミングみたいなことはやらないの?
>>548
(;´д`).。oO( やってみぃ )
>>548
確か昔そんなスレを見たような気が・・・
551デフォルトの名無しさん:02/04/04 20:46
只今あるソフトを移植してるのですが、
pase error before `size_t'
というエラーが死ぬほどでます。これを出ないようにするにはどうしたら
いいでしょうか?
一つにはコンパイルオプションとして-ansiをつければいいというのが
あるそうなのですが、それでも出るものは出てしまいます。

なにか方法があれが教えて下さい。
コンパイラはgcc、OSはLinuxです。
何を移植しているのか、もしくは
移植源の環境(OS コンパイラ 使用ライブラリ)

最低限これだけは書いてこい
>>551
実際のコード見てみないと原因はわからん気がする
554デフォルトの名無しさん:02/04/04 21:05
何を移植してるのかはちょっと一身上の都合でバラスわけにはいかないのですが、
移植もとのプログラムはFreeBSD,gcc,libcです。よろしくお願いします。

このエラーがどういったときに出たりするものなのか体験済みであれば
それを教えて下さい。
555デフォルトの名無しさん:02/04/04 21:06
>>553
エラーもなにもlibc用のヘッダーファイル内でそのエラーが出るんですよ
configure.inとMakefile.amを書き直せ
557デフォルトの名無しさん:02/04/04 21:12
551のpaseはparseです。すみません
ヘッダーファイルにバグがあるとか?
560デフォルトの名無しさん:02/04/04 22:49
>>556
automakeは簡単に使えるようになるんでしょうか?
561デフォルトの名無しさん:02/04/04 23:04
ところで、
size_tって基本的にはunsigned intなんでしょうか?
562デフォルトの名無しさん:02/04/04 23:14
自己レスです。エラーの原因は分かりました。
ただ単にsize_tをtypedefしてるヘッダーを取り込んでいない
ことでした。でも、今度はそれがどのヘッダーをインクルードすれば
いいのかさっぱり、、、
size_t は stddef.h でしょう。たぶん。
>>555
parse error before なんちゃらかんちゃら
は、結構よく出るよ。
で、原因はそのなんちゃらかんちゃらの「前」にあるので、その行は問題なし。
#defineとかtypedefとか#ifdefあたりが、コンパイル環境のヘッダファイルと
微妙に矛盾してんじゃないかな。
プリプロセッサの出力結果を見てみよう。
565564:02/04/04 23:19
ガーン。既に解決・・・
566デフォルトの名無しさん:02/04/04 23:30
>>563
Linuxはdebianを使っているのですが、これのlibc-devに含まれている
<linux/stddef.h>では例の有名なNULLゼロか非かのもとが定義されている
だけでした。

>>564
ありがとうございます。
#include<stdio.h>
size_t st;
int main(){}
とすればコンパイルは通るのですが、
stdio.hの行をコメントアウトするととたんにコンパイルが
通らなくなります。そのときのエラーメッセージはこうです。
test.c:2: parse error before `t'
test.c:2: warning: data definition has no type or storage class

これは先のケースと同じものでした。parse errorが重要なのではなくて
その下の行でした。あんまり沢山でてたので見落としてました。
C言語でキーボードから入力した
二進数、八進数、十六進数を十進数に変換するにはどうすればいいでしょうか。
strtolとか、sscanfとか。
>>567
どのへんまでできていて、どのへんに困ってるの?
>>569
実は全然……
桁の重みをどうやって表現しようか考えているけどちょっと分からない。
数字を一つ一つバラすのかと思ってみたがcharを使うのかな
でもそれだと文字列扱いに……
筆算での求め方は分かってるのか?
とりあえず。
2進数だと「1」の入っている桁に
2のN乗といった重みを加えて足していけば出るはず。
573デフォルトの名無しさん:02/04/05 00:28
size_tの定義されてあるところが分かりました。
嬉しいので報告させていただきます。

<linux/types.h>で
typedef __kernel_size_t size_t;
となっていて、
<asm/posix_types.h>で
typedef unsigned int __kernel_size_t;
と定義されていました。

皆さんどうもありがとうございました。
このスレレベル高くて初心者には荒らせねぇ。
鬱だ・・・また出直すとするか。
575573:02/04/05 00:46
ところでまた別のエラーのが沢山出てきました。
こういったヘッダーファイルの依存関係を解決する手段として
automakeは使えるんでしょうか?automakeがなんなのかさぱーり
分かりません。

>>574
漏れがレベルを極端に下げています。申し訳ありません。
576575:02/04/05 00:46
リスンソケットって何ですか?
↑新手の荒らし手法だな(藁
578576:02/04/05 00:49
私は573のひとではありません。
おんなじ時間に書きこみをしたみたいです
579576:02/04/05 00:49
荒らしではありません。ごめんなさい
listenで検索
>>573
gccでコンパイルするアプリはAutoconf、Autoまけは基本だ。
makefileが書けるならこことか読みながらMakefile.amを書いて見るのがいい。
http://www.ainet.or.jp/~inoue/gnu/autoconf.html
>>567
それって大抵の本に必ずと言っていいほど載ってないか?
頭から一文字づつ読んで

n = n * 重み + その桁の値;

でループ回せ。
583デフォルトの名無しさん:02/04/05 05:38
#if define(XXX)と
#ifdef XXXは
何が違うんでしょうか?
トークンが違う

効果は同じただの短縮
585デフォルトの名無しさん:02/04/05 05:42
>>584
こんな時間に即レス、、、どうもありがとうございます。
#if defined(XXX)の間違いでしたね。
ちなみにこれだと
#if defined(XXX) && defined(YYY)
なんてこともできるみたいですね。
586デフォルトの名無しさん:02/04/05 06:27
おまいら!今日びC言語なんてやってんじゃねぇ!
VC++7.0a遂に発表されたぞ!MFCも7.0になるぞ!

http://natto.2ch.net/test/read.cgi/denpa/1016241454/
587569:02/04/05 08:05
>>570
とりあえずバラしかただけど、10進数以下なら、「0」の文字コードぶん引けばいいので、
char in[] = "12034";
v = in[0] - '0';
ってな感じで、この場合 v に 1 が入るなりよ。
16進数の場合は、アルファベットも混じってくるので、場合分けするなり
なんなりしてね。
588デフォルトの名無しさん:02/04/05 08:21
#ifdefと#ifndefってなんですか?
>>588
え?マジで知らないの?
最近無知荒らしが酷いな。
591>588:02/04/05 10:22
#ifdefはマクロがdefineされているとき#endif(もしくは#else)との間を残す、プリプロセッサ
#ifndefは逆
>>588
マクロを定義する際に再定義してしまう可能性がある時によく使うかな。。。
プリプロセッサに「マクロを再定義してんじゃねーよ!」って言われないように。
とりあえずヘッダを2重インクルードしないようにするために使う。
>>593
そーですな。
#define hogehoge
とか
#define hogehoge 1
とか
#define HogeMainH
なんつー感じの定義なんかと一緒にね。
595デフォルトの名無しさん:02/04/05 18:49
#defineの再定義は問題ないんですか?
Waringしか出ないのでいいのかと・・
596デフォルトの名無しさん:02/04/05 18:50
typedef struct{
int foo;
double bar;
char baz[256];
} aaa;

typedef struct{
int foo;
double bar;
} bbb;

aaa a;
bbb b;
とした場合、
*(*bbb)&a = b;

a.foo = b.foo;
a.bar = b.bar
と同じ結果を期待できますか?
できたとしてもやるもんじゃないヨカーン。
コピーするなら同じ型同士で、あと(*bbb)は(bbb*)。
>>596
自分でソースを書いて実行してみたか?
それすらせずに質問するのはどうかと思うぞ。

恐らく殆どの処理系で、思ったとおりに動作するだろうが、
気分的には>>597に激しく同意する。
構造体のメンバの並びは実際にメモリに割り付けられる順とは何の関係
も保証されていない。
600デフォルトの名無しさん:02/04/05 22:08
順番は大丈夫だけど、メモリ配置はパディングが入って狂うかもしれない。
602デフォルトの名無しさん:02/04/05 22:37
ちょっと質問
ポインタのポインタありますよね。
int *pointer;
int **temp;

temp = &pointer;

ってすると思いますがなぜ
int **tempにする必要があるのですか?

ポインタのポインタとは言えただのint型のポインタに違いは無いのだから。
int *temp;
temp = &pointer;

で理屈ではあっていると思うのですが?

それとも決まりだからしょうがないって感じなのでしょうか?
**tempにしなければいけない理由は?
お願いします。
>>602
int型へのポインタの実体は、intデータを指す。
int型へのポインタのポインタの実体は、int型へのポインタを指す。
全然違います。
604デフォルトの名無しさん:02/04/05 23:01
>>602
例えば、

void main(void)
{
FILE *fi;
foo(fi)
}

void foo(FILE *fi)
{
fi = fopen("bar", "r");
}

とやってもうまくいかないよ。

void main(void)
{
FILE *fi;
foo(&fi)
}

void foo(FILE **fi)
{
*fi = fopen("bar", "r");
}

としなければならない。それと同じこと。

それからこれは極論になるが、int ***********p; なんてのも作れる。ほとんど
使い道ないけど。
605デフォルトの名無しさん:02/04/05 23:04
あっちなみに>>604は、main関数の foo(fi); の後で、fiを使った処理を行うものと
仮定しているよ。
さんくすこ
607デフォルトの名無しさん:02/04/06 00:15
603の説明でよいのだが初学者が陥りやすい点なので重ねて強調しておきたい。

>ポインタのポインタとは言えただのint型のポインタに違いは無いのだから

これはおそらくポインタの値を表示させると(ふつうは)アドレスが表示されるからそのように感じているのだろう。
しかしポインタはアドレスではない。ポインタとはオブジェクトを指すものであり間接演算子を適用したときに
その実体にアクセスできることが保証されているだけである。

型の名前は変数の宣言から識別子をのぞいたものであるから以下の宣言での変数aの型は
int a;  //int型
int *a; //int *型
int **a; //int **型



608デフォルトの名無しさん:02/04/06 00:21
VC++6で、下のようなコードを書くと最後の行でエラーがでるんですが、何故?

struct aho
{
unsigned char baka;
};

struct aho sine;

sine.baka=0;
>>608
どんなエラーが出るのかくらい書きなさい。
610デフォルトの名無しさん:02/04/06 00:26
error C2143: 構文エラー : ';' が '.' の前に必要です。
error C2501: 'sine' : 識別名を宣言するのに、型が指定されていません。
error C2371: 'sine' : 再定義されています。異なる基本型です。
'sine' の宣言を確認してください。
error C2143: 構文エラー : ';' が '.' の前に必要です。
って出ます。こんなの初めて
611デフォルトの名無しさん:02/04/06 00:27
>>608
main関数がないからです。
612デフォルトの名無しさん:02/04/06 00:29
>>611
Windowsなのですが、WinMainはあります
いや、そうじゃなくて。
初期化する場所が間違ってるってこと。
614デフォルトの名無しさん:02/04/06 00:57
>しかしポインタはアドレスではない。ポインタとはオブジェクトを指すものであり

ポインタってアドレスじゃないの??
>>614
ポインタは演算ができる
616デフォルトの名無しさん:02/04/06 00:59
>>615
どういう事ですか?
617デフォルトの名無しさん:02/04/06 01:08
>>616
ポインタは、アドレスではなく、あくまでもアドレスを保持する変数である。
型がついてるので、単純にアドレス、で済ますわけにはいかない。
619デフォルトの名無しさん:02/04/06 01:11
>>617
それについて詳しく載っているサイトや本はありますか?
ポインタがアドレスじゃないとは私にはあまりに刺激的過ぎます。
今までアドレスだと思い込んでプログラム組んできました。
620デフォルトの名無しさん:02/04/06 01:12
アドレスのアドレスって
結局アドレスのような気がしますが型が違うという事でしょうか?
なんか頭悪げな奴が一匹…
622デフォルトの名無しさん:02/04/06 01:15

あほか、おまえしめるぞ
623デフォルトの名無しさん:02/04/06 01:16
このサイトで質問してみなさい。タイムラグがあるかもしれませんが、
各種方面の方々が懇切丁寧に教えてくれます。
http://www.pp.iij4u.or.jp/~nabe/c/
624620:02/04/06 01:23
アドレスのアドレスはアドレスなワケで
コンピュータはどこからデータなのかどうやって分かるんですか?
int *temp,*pointer,i;
pointer = &i;
temp = (int*)&pointer;
*(int*)(*temp)=40;
こういうことがやりたいというなら、ご随意に。
死にたいと言うものを止めはいたしませぬ。

>624
わかりはしない。デレファレンスされたときに、それを
アドレスとして扱う、というだけのはなし。
>>620
int **p = &&i;
(´-`).。oO(どうしてこれは駄目なんだろう?)
627デフォルトの名無しさん:02/04/06 01:29
>>624
アドレスのアドレスは確かにアドレスですが、どんどんその値が参照するに
つれて変わっていくでしょ?

int i;
int *p;
int **pp;

p = &i;
pp = &p;

とした時、pはiのアドレスを保持しますが、ppはあくまでもpのアドレスを保持
するのであって、iのアドレスを保持するわけではありません。
ここまではわかりますか?

では、ppを使ってiを参照しようと思ったら、**pp のように、*を二個つけなけ
ればいけないわけ。

pp->p->i のように二段になっているというのがその理由です。おわかり?
結局、アドレスだし、コンピュータには
変数がアドレスか値かは区別できないよ。

ただ、コンパイラがソースを解釈する時に混同しないように
各言語でポインタ用の型を用意しているんだよ。

int *a;
int *b;
a=&b;
これが成立したら、
*a
がbのポインタを指すのか、bの内容を指すのかコンパイラは判断できないからね。
>>626
&&i はオカシイ。
変数iのアドレスを参照するのが&iだから、
&&iは何を指す?
ちなみに、
int **p=(int **)&i;
なら問題ないけど。確実にバグる。
(アドレスつったって、オフセットかもしんないし、物理アドレスかもしんないし、仮想アドレスかもしんないし、
リニアアドレスかもしんないし、ハンドルかもしんないし、セグメントディスクリプタかもしんないし…
「アドレス」っていう単語には、あまり意味が無い気もする・・・)
>&&iは何を指す?
テンポラリオブジェクト、かなぁ。
632629:02/04/06 01:44
>>631
スマソ。テンポラリオブジェクトって分からんわ。
そういえば、論理演算子に&&あるやん。
>>631
ここは C スレだよ?
>>625
int *temp,*pointer,i;
pointer = &i;
temp = (int*)&pointer;
*(int*)(*temp)=40;

これってどうダメなんですか?
635デフォルトの名無しさん:02/04/06 02:11
>>634
これはダメじゃないけど、ポインタの意味をねじ曲げて使っている。
tempはint * なのに、int ** に無理矢理コンパイラを騙している。
しかも見た目はint * なので、なおさらたちが悪い。
これは単なる遊びだと思って下さい。間違っても真似しないように。
636a:02/04/06 02:13
>>634
打つのが面倒臭いから
>>635
なるほど、理解しました
要するに奇妙なコードは最初から書くなってことですね
638Disca ◆NAfP6znE :02/04/06 02:16
現在、データベースなるものを自力で作ろうとしているのですが、
データの検索、データの追加時に、fread(fget)などで修得すると思うのですが、
64KByte(GlobalAlloc(Windows環境での普通割り当て値)のデータファイルを、
64KByteのバッファを用意して、まるごと読み込んでから検索した方が速度的に早いのか…。
それとも、小さなバッファを用意して、こまめに fread or fget or fgetc でも早く検索
できるのでしょうか?。

それと、fread などでファイルから読み込む時には、ファイルからダイレクトに入出力しているのでしょうか?
お願いいたします。
639デフォルトの名無しさん:02/04/06 02:19
>>637
いや、奇妙なコードを書ければ、それはそれで意味あるぞ。
最高に読みにくいCのコードを集めてコンテストしてるおバカなサイトがある。
http://www0.us.ioccc.org/years.html
640鈴木証人:02/04/06 02:19
お答えします。それはですね、あなたですね、でーたーべーす、
というものですね、はなはだ、曲解、ないし、勉強をしていない、
と、こうですね、思わざるをえないんです。
変数にアドレスを格納しきれないとき、
エラーが起きる。
例えばintをcharにしたときとか。

#これでいいのかな?
これからCを勉強しようとしているものです。
質問なのですが、とあるところに、Cを勉強中はブルースクリーンになってしまうことが多いので、
メインのPCではプログラムを組まないほうがよいとあったのですが、本当でしょうか?
>>642
心配しすぎだ。
バックアップさえこまめに取っていれば、大抵は問題無い。
但し、仕事で使うPCや、他人と共有するPCなら避けた方が無難。
NTでやれ、NTで。
ユーザープログラムごときでOSが死ぬことはないから
645デフォルトの名無しさん:02/04/06 03:23
>>638
素直にDBクラス使うとかはだめなの?
速さを求めるなら、自力よりは速いと思うけど。
>>638
漏れは>>645に禿同なのだが、とりあえず置いておく。

データがシーケンシャルなら、まとめて読み込む。
ランダムなら、必要な箇所のみ読み込む。
どちらにしても、システムコールの呼び出し回数を少なく押さえる事を考慮する。

但し本当に速度を求めたいなら、両方書いて速度を比較しる。
>>643-644
98と2kがあって、98のほうで遊んでみようかと思ってたんですけど、メインの2Kでやって
問題無いですかね。
今まではPerlしかやってないので。
>>647 やってみればわかることをイチイチ聞くな。
ていうか
>Cを勉強中はブルースクリーンになってしまうことが多い
初めて聞いた
>>647
2kでブルースクリーンになることは稀だと思うぞ。
95系だとOS道連れに死んでくれるからやめておけ。
>>624
もう解決しちゃってるぽいけど、一応。
>>628が書いてるように、Cコンパイラは、コンパイルする時、
ちゃんと「どんな型のポインタなのか」を意識しています。
char *char_p = 0;
int *int_p = 0;
double *double_p = 0;

int_p += 10;
char_p += 10;
double_p += 10;

printf("char_p=%p\n",char_p);
printf("int_p=%p\n",int_p);
printf("double_p=%p\n",double_p);

上の3つの表示結果、それぞれ違うわけね。

で、>>625がたまたまうまく動くマシンというのは、例えばi386互換
CPUで、アドレス幅とintのサイズがたまたまどちらも32bitで同じになってる時だね。
int *p;

printf("pのサイズは%dバイト\n",sizeof(p));
printf("*pのサイズは%dバイト\n",sizeof(*p));
(ほんとはsizeof()が返す値は「バイト」じゃなくて、charのサイズの何倍なのか・・・らしい?)
int *pをchar *pとか、double *pとか、char **pとかに変えて実験してみよう。
652デフォルトの名無しさん:02/04/06 09:17
>アドレスのアドレスはアドレスなワケで
全然違う。それに今はなしているのはポインタの話だ。
char *a; int *b; double *c; int **d;
とかあってこれらのポインタとしての値(値は事実上アドレスといってもいい)が等しくても
*で逆参照したときはそれぞれの型に従ってその変数の値が取り出させる。

ポインタがあることでビットオーダー、バイトオーダーとかその変数がどれだけのメモリを
割り当てられているのかなどプログラマが管理しなくてすむようになっている。

もう一度強調する。ポインタはアドレスではない。
実装の仕方は規定には無いので嘘にナル可能性もあるが事実上は
「アドレスと型情報の2つ併せて」ポインタ

>それについて詳しく載っているサイトや本はありますか?
この板でもよくあがる前橋和弥「C言語ポインタ完全制覇」がいい。語り口に癖があるので
嫌いな人はだめかもしれないけど。Hpもあるんだけどそこ読んで口調が嫌いじゃなければ
読んでみる価値がある。

ttp://member.nifty.ne.jp/maebashi/programmer/pointer.html
>>652
struct test
{
int *a;
char *b;
};

test.a = (int *)0x00001f;
test.b = (char *)0x00001f;

疑似共用体。
654デフォルトの名無しさん:02/04/06 09:44
>変数にアドレスを格納しきれないとき、エラーが起きる。例えばintをcharにしたときとか。
>#これでいいのかな?

たぶん誤解しているので説明する。
普通、アドレスはアドレスなのでint *のポインタの「値」もchar *のポインタの「値」も
サイズは同じであることが多いだろう(保証されているわけではない)。だから桁あふれとかで
格納しきれないというようなイメージを持っているのなら全く理解していないことになる。

>コンピュータはどこからデータなのかどうやって分かるんですか?
ポインタ=アドレスと思っているのが間違い。
アドレスからデータを取り出すためにポインタがある。アドレスだけ渡されてもコンピュータは
(プログラムは、コンパイラは?どの表現がベターかわからないけど何となくわかるよね)
どのように値を取り出せばいいのかわからない。例えばintという型がわかればそのアドレスから
sizeof(int)分のサイズを読み込んでintとして扱う。
655デフォルトの名無しさん:02/04/06 10:26
registerやvoratileなどと言う予約語がありますがあれはどういうときに使うのですか?

またunionと言う共用体がありますがあれはstructと言う構造体とはどこが違うのでしょうか?

また関数ポインタと言うのは変数にポインタを持っている関数と言うことでよいのでしょうか?
void *function(*var1, *var2){};
というように、
プログラミング言語Cを見ても関数ポインタのことはさっぱりです。

また、プログラマから見たOSはAPIだ、と聞いたことがありますがあれはドいうことなのでしょうか?
プログラム書くときにAPIを使いこなせないとそのOSのプログラムはかけないと言うことでよいのでしょうか?
WINDWOSでプログラムするときにはWIN32を皆さんは暗記はしなくてもイメージは覚えているのでしょうか?
その上でプログラム上必要な関数は自作するのでしょうか?
どんな命令を作って、どんな命令をAPIから拾ってくるか、と言うイメージがうまくできません。
なかなか初心者以前の入門者の質問で申し訳ございませんがお答えいただけましたらよろしくお願いいたします。

たくさん質問があって申し訳ございませんが、ご回答よろしくお願いいたします。
>>655
register:レジスタを変数に割り当てる−>メモリからのロードが必要なくなるので高速に。制限あり。
voratile:最適化を行わない変数。メモリマップドIOなどの場合必須。

共用体:>>653参照。

関数ポインタ:全然違う。
関数のアドレスを指すことのできるポインタ。
http://www2.muroran-it.ac.jp/circle/mpc/qanda/prog0000.html

OSはAPI:そのまんま。プログラマから見てOSは巨大なライブラリである。

イメージ:?そう言うAPIがあったことだけは記憶している。後はリファレンスを検索。

自作:当たり前です。他に誰が作ってくれると?

>>656
変数をレジスタに割り当てるだな・・・。鬱。

総評としては「検索くらいしろ。Cの参考書くらい読め。」ってとこかな?
658デフォルトの名無しさん:02/04/06 10:42
>>656様。
registerやvoratileはアプリ屋などでは使用しているのでしょうか?
私は使用したことがありません。
関数ポインタも同じです。

また、APIですがWindowsでインターネットやりたくてもネットにつないでも、
その先ブラウザソフトがないとWebが見れないのと同じで、プログラムするときにAPIでネットにつなぐAPIがあっても、その先ブラウザ用のプログラムを自分で用意する(自分で書く)必要があると言うことでよいのでしょうか?
なかなかうまくイメージできません。
昔M$のDMでシェアウェアなどは普通、APIを組み合わせて普通は作るとありましたが、あれは本当のことなのでしょうか?
>>658
上:アプリ屋って・・・何さ?

下:
最近のWindows環境では話が変わってきたけどね。
一番浅い部分で話すとWindowsAPIはprintfなどと同じ「関数」である。
よってWindowsプログラムはすべてAPIの順列である。

最近のWindowsでは各種機能のコンポーネント化が進んできてIEの機能を
まるまる利用できたりもする。

CがC++に進化したようにWindowsも手続き型からオブジェクト指向型に進化していると言える。
registerとautoは指定したことありませんなぁ。
> 変数をレジスタに割り当てるだな・・・。鬱。

どっちでもいいんだけどね。

あと、「割り当てる」じゃなくて「割り当ててほしいというヒントをコンパイラに
伝える」だな。
まあ、コンパイラが最適化をするときにはこの修飾子は無視されると思う。
662デフォルトの名無しさん:02/04/06 12:07
volatile(voratileじゃないぞ)は揮発性という意味がある。
使いどころは、マルチスレッドプログラム(あるいは割り込み処理があるプログラム)
において変数が非同期に書き換わる可能性がある場合、だな。
メモリマップトIOも非同期に書き換わる変数の一例だね。

メインループ:
volatile int muststop = 0;

while( muststop == 0 ){ // check stop flag
doProcess();
}

割り込み処理:
interrupt_routine(){
  muststop = 1;
}

てな場合に、muststop変数をvolatile宣言しておかないと、
コンパイラの最適化によって、メインループがmuststop変数のチェックを
しなくなる可能性がある。

変わりネタとしては、コンパイラの最適化にバグがあると疑わしい場合に、
最適化を妨げるために使うとか。
663デフォルトの名無しさん:02/04/06 12:24
>655
前橋マンセーと思われると何だけど
ttp://member.nifty.ne.jp/maebashi/programmer/pointer.html
の下の方に関数へのポインタの話があるので読んでみて。

それから初心者以前の入門者などと名乗っているけどそうなのかい?
もし本当に初心者というなら疑問に思うことが的はずれというか何というか。
やっと分数を覚えたくらいの学力で微分方程式の解法のことを心配していても
しょうがないでしょ。

もし予防線張っといて入門者といっているだけならもう一度K&Rを読みなさい。
664デフォルトの名無しさん:02/04/06 12:25
>>661
って優香、registerはコンバイラの最適化を妨げることさえある。レジスタの
多いRISC系CPUだとあまり問題にならないだろうが、x86のような貧弱な
レジスタセットだと、思い切ってコンパイラに任せてしまった方がいい結果が
得られることが多い。
だからヒントに過ぎないと・・・
レジスタ少ないCPU用の最適化コンパイラは、まず無視するから問題なし。

まあ、特別な事情が無い限り付ける必要はないね。
666デフォルトの名無しさん:02/04/06 13:08
>>665
inlineもヒントですね。C++だけど。
registerはたまに強制するコンパイラがあると聞きましたが。でも強制しても、
手持ちのレジスタを使い切ってしまえばどうせ使えなくなるけど。

話は変わるけど、コンパイラが吐き出すアセンブリ出力を見ていると面白いね。
僕はC言語をそうやって勉強しました。今もそうしています。
667sage:02/04/06 13:59
突っ込みどころが多すぎてどこから手をつけるべきかわからんな。
>>667
なにか言いたいけど、反論が怖くて何も言えない人。
>>667
あんたがどの発言を指してるかわからないばっかりに>>655-666全員ドキドキだ。
670デフォルトの名無しさん:02/04/06 14:49
>667
663だ。いいたいことがあるならはっきり言え。

俺はいつでも訂正する用意がある。
無視ぶっこいて逃げ出す用意もある。

待ってるぞ。
>>670
いや、多分あんたじゃない。突っ込むに値しないし。
672667:02/04/06 14:55
思わせぶりに言ってみただけです。
ごめんなさい。
俺は例の初心者に対して言っていたのだとてっきりおモってたんだが(藁
まあまあみんなマターリしようよ。
せっかくvoidタンも去ってくれたんだし。
sizeof(int *)とsizeof(char *)が違う処理系もあり得ると、文献で
見たことがある。

実物は無いけど
676デフォルトの名無しさん:02/04/06 18:44
>>675
えぇーっ!!??
677デフォルトの名無しさん:02/04/06 19:02
ある人に、ハードディスクを逆回転させることができると
聞いたのですがやりかたがわかりません。教えてください。
よろしくお願いします。
>>675
何の文献だそりゃ?
民明書房館
>>677
ハァ?マジで知らないの?
>>677
手でまわす
682677:02/04/06 19:58
教えてください。マジでしらないです。。
683Disca ◆NAfP6znE :02/04/06 20:01
>>645
>>646
ありがとうございます。自力でデータベースプログラムを作ります。
シーケンシャン方法なので、一度にファイルごとバッファに入れようと考えています。
684むぅ-01Fb ◆Muu/FbRQ :02/04/06 20:05
(´∀`)<シーケンシャン方法なので、一度にファイルごとバッファに入れようと考えています。)

  むぅ?
    ∩∩ 
   (゜x゜ )○
(´-`).oO(メモリに全部読み込めるなら、なんで最初からそうしないんだろう・・・
>>683 >>684
トリップ付きコテハンとはめずらしいな。
このスレでは初めて見た。
ガーン・・・ポインタ話が終わってしまったようだ・・・・・
もう少し早くPC復旧させればよかった。
俺のポインタもコンパイルエラーを吐きそうです
689Disca ◆NAfP6znE :02/04/06 22:49
>>684
>>685
自爆(自笑)してしまいました。スマソ。
690Disca ◆NAfP6znE :02/04/06 22:55
今考えているのが、64KByteまでのデータだったら、
ファイルごとバッファに入れようかと考えています。
もし、64KByte以上だったら、数回に分けて(64KByteに区切って)バッファに格納して
各回ごとに処理をしようと考えています。

そこで質問なのですが、
http://www.bohyoh.com/CandCPP/C/Library/index.html
標準ライブラリで、ファイルのバイト数を収得する関数はありますでしょうか…?
MFCなら、_fstat などがありますが…。
>>690
MFCじゃなくて標準ライブラリじゃない?
>>690
ふつー、fseek()とftell()だけど、なんで分割読み込みするのに
ファイルサイズを知る必要があるのかわからん。
while(fread(...))
で済むんでわ?
693デフォルトの名無しさん:02/04/06 23:18
関数のプロトタイプにも仮引数名を書いた方がいいですか?
>>693
int copy_some_data(char* dst, char* src);
int copy_some_data(char*, char*);

どっちがいい?
695デフォルトの名無しさん:02/04/06 23:22
>>694
わかりやすいのは上だけど、格好良いのは下ですね。
696sage:02/04/06 23:22
微妙。
でもだいたいはいらない。
>694
前者に決まってる
後者を薦めるのはツールを使えない愚か者
698Disca ◆NAfP6znE :02/04/06 23:29
>>691 >>692
ありがとうございます。
ちなみに、64KByte以下の場合ですが、
あまり効果はないのですが、ファイルサイズがわかっていたら
最初に確保するバッファサイズの節約になるかと思ったためです。

>>692
ftell ありがとうございます。今まで以下のでやろうとしていたのが恥ずかしいいくらいです。

void main(int argc, char *argv[], char *envp[])
{
  FILE *pFile, *pHead, *pTail;
  if((pFile= fopen("data.txt", "rb")) == NULL)
  pHead= pTail= pFile;

  fseek(pHead, 0, SEEK_SET);
  fseek(pTail, 0, SEEK_END);
  printf("%d Byte\n", pTail - pHead);
  fclose(pFile);
}
ちなみに結果は、0Byteです。
無理だろうとは思っていましたが…。
>>694
漏れも前者。
なんでかっつーと、関数の宣言をコピペするだけでいいので、楽だから。
>>699
あはは。
コピーした後にわざわざ変数名を消している俺は馬鹿だ(笑)
701700 :02/04/06 23:32
今だ!ゲットー
702700:02/04/06 23:32
>>701
わりぃ、馬鹿なうえに邪魔までしてしまって。
> int copy_some_data(char* dst, char* src);
int copy_some_data(char* dst, const char* src);
ちゃんとconstつけよう。
>>703 char* ならそうでしょうね。

int convert_some_data(struct MyStruct* result, struct MyStruct* source, int condition);
int convert_some_data(struct MyStruct*, struct MyStruct*, int);

float inner_product(float x1, float y1, float z1, float x2, float y2, float z2);
float inner_product(float, float, float, float, float, float);

コードそのものがなるべくドキュメントであったほうがよいというハナシは
誰が言い出したんだっけな。
くぬーす?
おはつです
CでCGIを書こうと奮闘しているのですが
(鯖はrimnet、OSはFreeBSD Ver.3改)
とりあえず書いたら、IEでは問題ないのだけど
NS4.7/6.2で見ようとするとError500 Internal Server Errorでます
原因がわかりません。
教えてください
ttp://members.tripod.co.jp/mod5/enter.c.txt
問題の切り分けをしようという気はないのか?
まずは"perl"で問題を再現させる最小のコード書いてみろ。
つか板違い
>if(length>MAXLEN) {printf("CONTENT_LENGTH>MAXLEN\n");exit(0);}
たとえばこことか。

>buf=((s[++i]>='A') ? s[i]-'A'+10 : s[i]-'0');
こう、なんつーか、スゴいコードを書くんだな‥‥
4eとかは無視かい。

709デフォルトの名無しさん:02/04/07 03:41
>>678
C言語辞典だかそういう名前の本で、色々なハードウェアでの
型の大きさが一覧になっていた。

NECだか日立の見慣れない型式のハードウェアだったと記憶している
誤植かなとも思ったが、3とか4とかが混ざっていたので本当だったのでは
710デフォルトの名無しさん:02/04/07 10:46
プログラムとしてC言語の構文を覚えたりアルゴリズムやデータ構造を覚えたり、設計手法などにも目を通したのですが(プログラミング作法という書籍を購入してきて)プログラムができません。
基本情報処理資格も取得したのですが自分で1からは書けません。
会社には所属したことは無く、完全に独学で学んでおります。

私には何が足りないのでしょうか?
あきらめるしか方法が無いのでしょうか?

最近思っているのですが、作りたいものが無いのかもしれない、とも思ってきました。
入社して社会人としてプログラムしても良いのでしょうか?
>>710
独学・趣味でプログラム作ると
1.作りたいものがある(≒解決したい問題がある)
2.適当に作ってみる
3.使ってみて不便な点をどんどん拡張
4.無理な拡張してプログラムが破綻
5.コードをいったん全部捨てて最初から作り直す(3.へ戻る)
っていうサイクルを繰り返して
企画・設計・コーディング・デバッグ・メンテナンスを
一通り覚えるもの(と思ってるん)だけど、
1.が欠けてるのはある意味致命的かも。
趣味でやるにはCは色気がなさ過ぎるので別の言語を試してみることをお勧めする。

あるいは無理してやりたいことを見つける必要はなくって
いっそ仕事としてやってみるといかも。
足りないのは実務経験だけみたいだから適切に仕事をあてがってもらえば
何とかやっていけると思うよ。
>アルゴリズムやデータ構造を覚えたり、設計手法などにも目を通したのですが
ここら辺の知識がまったくない厨房でも平気で会社入ってくるからね。
>>710
そんな堅苦しく考えてたってプログラミングはできやしねーよ。
俺なんて授業がつまらないからゲームを作ったり、エロゲーのセーブデータを
書き換えようと常駐型バイナリエディタを作ってみたり。
作りたいものを作ろうとする気力も無いならば今すぐプログラマー気取りなんざ
やめちまえ。そういうのを厨房っつーんだよ。
>>710
ああ、俺の友達にもいるよ。そう言う奴。
人のプログラムを改造して課題こなしてきたからプログラムの解析は得意。
今、お互い就職活動なんだ。
一緒に同じ企業に行ったんだよ。
『君の学科は情報系だけどどんなことしてるの?』
「あ、プログラミング。」
『いやいや、他にもさ・・・』
「えっと、プログラミング。」
勝てると思ったよ。
714706:02/04/07 11:12
>>707
Perlは全くわかりません
>>708
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/
ここから丸パクリした部分です
>>713
勝てるね。
勝てるかどうかは>>713次第だろ。怪しそうだが。
>>710みたいなのは、デバッグ要員として意外と重宝されるぞ。
717デフォルトの名無しさん:02/04/07 12:46
あの構文木ってなんですか?
コンパイラと何か関係がありますか?
>>717
ありますよ。構文解析の時に非常に有用。コンパイラ関係の本には必ず載ってます。
719デフォルトの名無しさん:02/04/07 13:25
俺含めて、勝ち組みってのはコーディングなんかしないね、実際。
>719
フリーター業界の勝ち組みサンですか?
>>719
かと言ってプログラマのお茶組んだりコピー取ったりは勝ち組とは言わないぞ。
722デフォルトの名無しさん:02/04/07 14:36
プログラムのトレースログを取りたいと思っています。
そこで質問なんですが
複数のプロセスから単一のファイルへの書き込みの定石みたいなものが
ありましたら教えてください。
一つのログ=1行です。
ファイルが壊れるのを一番恐れています。
mutexかセマフォ(1)使え
>722
stderrに出力してリダイレクト
歯痛制御なんぞOSに任せろ
725710:02/04/07 16:16
わざわざお答えありがとうございました。
私は自分では、今まで作ったものは、リモートでの電源ON/OFFくらいしかありません。
win9xならまだしもwin2000やwinxpではadminでの場合しかネット越しに電源は落ちません。
話になりませんね。
もっと実用的なものを作る知恵がないのです。

明日にでも職安に行ってみます。
考えてばかりではいけませんので
今は職安混んでいて行くのいやなんですけどね。
就職浪人していていますが、無職だとろくなことを考えませんのでそろそろ仕事もしないといけないですし。
どうもありがとうございました。
726710:02/04/07 16:16
あげてしまいました。
失礼いたしました。
int fd, nread; /*fdはファイルデスクリプタとして使用*/

/*何らかの処理*/

ioctl(fd, FIONREAD, &nread);  ←?


というような記述があるプログラムの中で出てきたのですが、
解説がなく何をやっているのかわかりません。
この ioctl(fd, FIONREAD, &nread);  の行は
なにをやっているのか教えてください。
>>727
一応ヒントを出すと、そのfdが何に繋がってるかによって、
違うんだなーこれが。
該当するデバイスのmanか、デバイスドライバのソースを見ると
わかるよん。
731727:02/04/08 00:03
ども 解りました。kbhitと同じような働きをするのですね。
”標準入力にデータがあるかを調べるのでは無く、fdに関連づけられている先の物(?)を調べる。”
ということであってますか?
732田部:02/04/08 09:19
age
>>693
(;´д`).。oO( 原人かよ! )
てか、なんのために関数プロトタイプを宣言するのか、小一時間(略)
>>706
デバグの方法を先に覚えてから
CでCGIしてくれ〜
ってか、なんつーか、
(;´д`).。oO( core 消せ )
735デフォルトの名無しさん:02/04/08 12:42
カレントドライブ内のファイル名を表示
させたいんだけど、どうすればいい?
>>735

dir
ls
>>735
opendir
findfirst
あたりで検索してみれ。
738名無し:02/04/08 18:53
明快C言語(入門)をマスターしたら
次は何をしたらいいでしょう?ステップアップするには??
>>738
K&Rを穴が開くほど嫁。
740735:02/04/08 19:28
>>737
サンクス!
741デフォルトの名無しさん:02/04/08 19:48
>>738
組め、悩む前にアプリを作れ。
出来たら公開しろ、ソース付きで公開しろ
そして叩かれて強くなれ
#俺はやだけど(w
まともなアプリじゃなきゃ、誰もソースなんて見ないけどな。
743738:02/04/08 20:17
取りあえずK&R読みます。
まだ、アプリつくれないんで
他にこれやれってのあります?
744デフォルトの名無しさん:02/04/08 20:21
つまり、ベースィックはC言語でつくられたのであり、
C言語は神様ですか?
MASMは最初、Pascalで書かれていました。
神様はPascalです。
C言語を勉強したきゃ人間コンパイラーを一度してみる
こったな。つまり、Cのコードをアセンブラーに手で
やってみろ。その逆も有効だね。
スレ違いだけど、アセンブラ勉強するときに
これ読んどけ!って本はなにかなあ。

それとも本なんて使わないものなのだろうか?
>>747
敢えて言うなら仕様書かと。
アセンブラ未経験なら 「はじめて読む486」。
多少慣れているなら、仕様書。
>>743
まだアプリが作れない?
アプリ作りながら学べやー。



とりあえずダンプ作れ。ダンプ、これ基本。
>>750
自動車工学は専門外なので無理です。
752デフォルトの名無しさん:02/04/08 23:08
Cは神様です
そのCを作った>>1はもはや語るまでもありません。
そう俺のオナペット(略)
753デフォルトの名無しさん:02/04/08 23:15
読み出し専用モードでオープンしたファイルを、"クローズせずに"書き込み専用にモードを変更することはできますか?
754753:02/04/08 23:15
環境はLinux+gccです。
「はじめて読む486」
って、プロテクトモード系の話が中心やなかった?
セグメントディスクリプタとか、IDTとか、V86モードとか。
アセンブラ未経験にはあまりおすすめできないと
思うのだが如何。
freopen()
>753
なぜr+で開いておかないのか小一時間(略
758753:02/04/08 23:18
>>756
それは内部でファイルをクローズしますよね?
759デフォルトの名無しさん:02/04/08 23:19
>>757
あ!! r+があったんだ・・・・・
+ってw+とa+だけと勘違いしていました・・・・
ありがとうございます。
初めてよむ8086っていいよ。
俺でもわかったもん
761名無しさん@Emacs:02/04/08 23:33
C言語1日目です。これからもよろしく。

#include <stdio.h>

int main()
{
puts("\x1b[0;1;33m信号が黄色で表示します");
red();
blue();
puts("\x1b[0m表示を既定の属性に戻しました");

return 0;
}


void red(void)
{
puts("\x1b[0;1;31m赤です");
}

void blue(void)
{
puts("\x1b[0;1;34m青に変わりました");
}

これをgccでコンパイルすると
example003.c:15: warning: type mismatch with previous implicit declaration
example003.c:6: warning: previous implicit declaration of `red'
example003.c:15: warning: `red' was previously implicitly declared to return `int'
example003.c:20: warning: type mismatch with previous implicit declaration
example003.c:7: warning: previous implicit declaration of `blue'
example003.c:20: warning: `blue' was previously implicitly declared to return `int'
と出るのですがどういけないのでしょうか。
書籍のを丸写しのはずいなんですが…。
C言語の中級者と上級者の違いはなんですか?
763デフォルトの名無しさん:02/04/08 23:36
>>761
関数のプロトタイプがないから。
Cを極めてその限界にぶち当たって
他言語に鞍替えすることができたら上級者。
>>762
リストがなんたるか分かる。とリストが実装できる。の差。
もうちょっとメタに。
あるアルゴリズムの仕組みが理解できる。とあるアルゴリズムを使って自分の目的を達成できる。
>>761
mainは一番最後に。一応基本。
>>766
そうか?
>>762
上級者じゃねぇからわかんねぇよ。
俺はまだ初心者でいたいね。気が楽だし。
>>766
それは違うと思うが・・・
770761:02/04/08 23:41
>>763,766
さんくす。
mainを最後に持ってきたら無事出来ました。

> mainは一番最後に。一応基本。
そうなんですが。書籍のサンプルには>>761にように
書いたあるのですがね。
771761:02/04/08 23:42
う、>>767,769さん。
違うのですかね…。
>>770
プロトタイプもきちんと書いておけよ。
複数のファイルにわけることが多いんだから。
>>770
無事っつーか、mainの位置よりプロトタイプ書く方がはるかに常識なんで、ぜひ書いてくれ。
774773:02/04/08 23:43
仕事的にな。
775767:02/04/08 23:43
>>771
「一応基本」に対して「そうか?」とレスしただけ。
俺は一番上に書いているけどな。
Apacheなんかはかなり下の方だね。一番下じゃないけど。
たしかcだとプロトタイプのない関数は
int func();と解釈されるので、戻り値がvoidで再定義をした扱いになっているんだと思う
777761:02/04/08 23:45
>>772
> プロトタイプもきちんと書いておけよ。
まだ、それは習ってませんね。
索引でプロトタイプを引いてみて調べてみます。
>>777
関数の宣言をコピペしてセミコロンをつけるだけ。
779761:02/04/08 23:49
>>778
> 関数の宣言をコピペしてセミコロンをつけるだけ。

void blue(void);
void red(void);

これを付ければ出来ました。
本では何も触れられてないが、どうしてだろう…。
780773:02/04/08 23:49
>>777
あと、関数への引数についても勉強しなけりゃいけないだろうが、
まぁ焦らず少しずつでもいいから確実に覚えていくが吉。
がんばれよ〜。
俺はもうソフトやめて畑耕すからよ〜。
>>779
関数のプロトタイプはANSIが標準化したものだからもっと昔に書かれた本とか?
・・・・・なわけないか。
.cに書くプロトタイプなんて牛乳に入れたクリープみたいなもんだ。
783デフォルトの名無しさん:02/04/08 23:54
>>768
お前じゃねえよ
784761:02/04/08 23:54
>>781
技評 はじめてのC言語 完全入門 2001/6
牛乳にクリープ入れると、コクがでておいしくなるよ。
>>782
ん?ヘッダーファイルを別途用意してそれにかけってこと?
小さなプログラムなら.cに書いてもいいんじゃネーノ?
787773:02/04/08 23:57
>>782
まぁ極めて単純であるが故に、だな。
どっち派?

int hoge( void )
{
return hoge();
}

int hoge( void ){
return hoge();
}

漏れは後者
789773:02/04/09 00:02
俺も後者。
>>788
後者。
自然に)の後で改行するね。ifやforの場合は改行しないけど。
791790:02/04/09 00:04
間違った。前者。
>>788
それは一列という意?
だったら
int hoge(void)
{ return hoge(); }
793デフォルトの名無しさん:02/04/09 00:05
漏れは前者。

ところで、
int main() or void main()
じゃなくて、ただ
main()
じゃだめ?
ごめん。あげちゃった。
俺mallocしてfreeしない派
796デフォルトの名無しさん:02/04/09 00:06
>>793
戻り値がint型でも明示的に書いた方がよくないか?
俺fopenしてfcloseしない派
俺void main(void)派
俺関数でchar *p;してreturn p;する派
俺、pthread_mutexattr_initしてpthread_mutexattr_destroyしない派
俺CでOO派
俺は>>790氏と同じ。
if,for,whileとか構造体定義は改行無しで関数は改行あり
俺Cはyacc/lexでしか書かない派
俺mainの中全部インラインアセンブラ派。
if (hoge)
  {
    hoge;
    fuga;
  }

if(ahya){
ahyahya();
}
else{
giko();
}

派。

} elseの方がよいらしいけど。
>>796
やっぱりそうなのかな?
ってか、変なことになる前にそうするべきですね。

ちなみに、基本的に
if (hoge)
{
hoge;
fuga;
}
派だけど、1つだけなら
if (hoge)
fuga;

808773:02/04/09 00:19
Cら樺派、なんつってな。







スマソ、もう寝るわ。
>>807
俺も。
ifとelseをいっぱい書くときは改行すらしない。

if(foo);
 bar;
elseをつけると

if (hoge)
  {
    hoge;
    fuga;
  }
else
  {
    foo;
    bar;
  }



結構見やすいな。
    if (x == 0) {
} else if (x == 1) {
} else if (x == 2) {
} else {
}

こういう書き方・・・しない?
ついでに。単文の場合は改行しない。

if (hoge) hoge;
else fuga;
>>812
よくするみたいだけど俺は嫌い(わがまま)
>>812
激しくしない。合わせても結局後で桁を変えないと
いけなくなる罠。しかも変えるのを忘れる罠。
816814:02/04/09 00:27
あ、} elseという書き方をよくするという意味ね。
漏れはしない。
>>811に一票。
818812:02/04/09 00:32
>>814
   if (x == 0) {
}
else if (x == 1) {
}
else {
}

これでもいい。else ifと先頭のifをそろえるかって事
819Ritchie先生風に:02/04/09 00:37
if(exp) {
 
} else if(exp) {
 
} else {
 
}

switch(exp){
case const-exp:
case const-exp:
default:
}
>>788
漏れ、できるだけ行数けちる派。
つまり後者。
しかたなく単独で { 書くケースは、
int hoge() {
 au();
 {
  int tmp;
 }
}
の3行めみたいなとき。
821デフォルトの名無しさん:02/04/09 00:54
'モナー ギコ'
という文からA=モナー、B=ギコってかんじにスペースで区切った文字列を読み込みたいんですけど、
この場合fgetsするのかfgetcするのかはたまたsscanfするのか。
どれがいいんでしょう?
一長一短なかんじがして、なんか混乱しますた。
822デフォルトの名無しさん:02/04/09 00:56
>>821
strtok()
823デフォルトの名無しさん:02/04/09 00:59
>>822
strという文字配列に入れるとしたら
strtok(str, ' ');
ということ?
fgets(buf, sizeof(buf), fp);
pMonar = strtok(buf, ' ');
pGiko = strtok(NULL, ' ');
>>821
fetgs()
sscanf()
826デフォルトの名無しさん:02/04/09 01:04
K&Rの95ページの関数getopで、
ungetchを呼び出すとき何故EOFだけ除く必要があるのか教えてください。
827デフォルトの名無しさん:02/04/09 01:11
  ∬∬∬∬    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ∬ ´Д `∬  < 改革に反対するなら、わたしの方から自民党を打ち壊す!
  ( つ[賞]つ    \__________
  | | |
  (__)_)
ungetchでEOFをもどすことはできない。
つーか、なんでEOFだけ除いているのか?を自分で考えられないようであれば
K&Rを呼んでいる意味はない。
830デフォルトの名無しさん:02/04/09 01:27
以前、MySQLについて質問したDiscaです。
C言語(Win環境)でMySqlを動かしたいのですが、
具体的なサイトを教えていただけないでしょうか…。
お願いいたします。
831デフォルトの名無しさん:02/04/09 01:30
833デフォルトの名無しさん:02/04/09 01:34
ファイルの内容をすべて消す方法はwやw+で開く以外にありますか?
unlink
>>834
man 2 unlinkで調べてみました。
これをオープンしている間に使えばよいのですね。
ありがとうございました。
836835:02/04/09 01:47
ということはwやw+で開いた時はopen()した後に自動的にunlink()を使っているのかな。
>open()した後に自動的にunlink()を使っているのかな。
open後のunlinkと、wでfopenするのは同じではない。
838デフォルトの名無しさん:02/04/09 02:58
ExcelやWordのようなソフト(アイコンをダブルクリックで起動して、
上書き保存ボタンとか終了ボタンとかあるやつ)はCだけで作れるものでしょうか?
今、LSI-C試食版で勉強中ですが文字ばかりなのでこの先不安です。
そういうソフトはVC.NETのC++で作らないとダメですか?
Cだけじゃ無理だけど、OSのシステムコールとか使えばできる
840デフォルトの名無しさん:02/04/09 03:19
>>838
可能です。
関係ないけどおまえら元気か?
>>841
なんとかw
>>841
最近すぐ元気がなくなる上になかなか立ち直らない
>>841は自殺する気
>>843
早めの5月病ってところじゃないか?
846Disca ◆NAfP6znE :02/04/09 10:08
>>831 見れないです(日本語しかよめないです、スマソ)
>>832 グーグりました。
なかなか、C言語でのMySQLのAPIライブラリ解説が無くて…。
良いサイトがあればお願いします。
>>846
日本でMySQLといえばhttp://www.mysql.gr.jp/
マニュアルの翻訳も載ってます。API解説は
http://www.mysql.gr.jp/jpdoc/3.23.x/manual.ja_Clients.html#C
のあたり。

っていうかスレ違いの気が…
848847:02/04/09 11:00
スレ違いついでにもうひとつ、Soft Agencyのサイトも。
http://www.softagency.co.jp/mysql/index.html
849デフォルトの名無しさん:02/04/09 12:01
>>839氏と>>840氏ではどちらが正しいのだろう・・・
850デフォルトの名無しさん:02/04/09 12:04
>>838
Cを使えばなんだってつくれるぞ!
UNIX(ワークステーション)っていうOSはC言語で作ったんだから。
Cコンパイルしてできるアセンブラの知識が有れば、
なんだって作れると思われ
>>849
Windowsプログラミングのバイブルといわれていた
「プログラミングWindows」はいまだにCでかかれている。
>>849
両方正しい。よく読んでケロ
853おしえて〜:02/04/09 12:28
整数の引数のビットを文字列として表示するってどうやればいーの?
たとえばbit(60);ってやったら
11-1100
みたいに4文字ごとに区切り文字を入れろって言われたんだけど・・・
>>853
宿題はえれなちゃんに聞けや。
http://pc.2ch.net/test/read.cgi/tech/1011722640/l50
855853:02/04/09 12:31
はーい、逝って来ます
unsigned な変数とsignedな変数を相互に変換して元の値が保証される?
unsigned char a = 0xff;
signed char b = a;
a = b;
printf("%d\n",a);
とかやったら255になることは保証される?
857デフォルトの名無しさん:02/04/09 15:56
あのーC言語を勉強するために家のPCにもソフトいれたいのですが
なにがありますか?
>>856
自分で試せ

unsigned char a = 0xFF;
signed char b = a;

if( b != 255 )
printf( "(゚Д゚)ハァ?\n" );
if( (unsigned char)b != 255 )
printf( " (゚Д゚)ハァ?(゚Д゚)ハァ?\n" );
>>856
fj.comp.lang.cで片山@PFUさんに聞いてくださいです。
>>857
検索かければよかろう。
861デフォルトの名無しさん:02/04/09 16:09
microsoft visualC++
これでイイの?
>>857
Borland のC++コンパイラを使いな。無料。
Cmagazineに付いてるよ。
C マガ買わなくてもここから落とせばいいような。
http://www.borland.co.jp/cppbuilder/freecompiler/
864857です:02/04/09 16:29
>>862-863

ありがとうございました
僕のPCにはコンパイラが標準で付いていました。
866Disca ◆NAfP6znE :02/04/09 19:06
>>846
>>847
ありがとうございます。
そこ、グーグリました。が…きちんと最後ま探していなかったです。
私はまだまだ検索暖炉と言う事が判明しました。終わり
8677:02/04/09 19:07
Borland のC++コンパイラ
8687:02/04/09 19:10
Borland のC++コンパイラをPCに いれたんですけど
メモ帳でプログラム書いて読み込もうとするんですけど
ファイルが見つかりませんってでますどうして?

ネタですか?
ソフトの使い方ならソフトウェア板に行ってください
8707:02/04/09 19:31
>>869
すいませんでした。もう2度ときません。
あとあまり調子乗らないほうがいいとおもいますよ
>あとあまり調子乗らないほうがいいとおもいますよ
あまり調子乗らないほうがいいとおもいますよ
872デフォルトの名無しさん:02/04/09 19:49
>>7
環境変数のPATHを設定しましたか?
>>870はバグってますか?
874デフォルトの名無しさん:02/04/09 21:06
>>873
仕様です。
875デフォルトの名無しさん:02/04/09 21:31
ちょっと拝見したが、
やはり、Linuxはむずいな!
まったく理解できん......
>>1は分かるの???
Linuxの何を理解しようと…
>>876
カーネル
>>877
サンダース
寒の戻りか?
今夜は冷え込むねぇ…
881デフォルトの名無しさん:02/04/09 23:04
ところで、
ファイルポインタをブロック単位(構造体など)で
移動できる関数とかってある?
882デフォルトの名無しさん:02/04/09 23:06
>>875
>>1を誰だと思ってるんだよ。
>>881
sizeof(構造体)*ブロック数 じゃ、だめなの?
884881:02/04/09 23:25
例えば、int no,char nameの構造体があって、
キーボードひとつ入力するごとにfwrite関数でファイルに出力して
もし同じ番号なら上書きするって感じなんだけど。
fseekとsizeofでいけるかな?試してみます。
885デフォルトの名無しさん:02/04/09 23:36
C言語は今現在、どのように利用されているのでしょう?
Cだけでソフトを開発するような場面はありますか?
また、Cと他の言語の連携ではどのような組み合わせが一般的なのでしょうか?
PerlからはCとJavaを使えるらしいが
Cからはわからん。
>>885
組み込みソフト開発。その他コンピュータの高水準言語のスタンダード。
DLLの様な仕組みがなければ連携は大変すぎてアフォらしい。

ガタガタ言わずにC覚えろ。知らないとプログラマとは名乗れないぞ・・・。
888デフォルトの名無しさん:02/04/09 23:53
JNIを使えば、CからJavaを起動できる。
Javaアプリの起動プログラムをCで書くことはある。
889888:02/04/10 00:23
⊂(`Д´⊂ )⊃==888げっとー
>>885
仕事でCでCGIを組んだよ。CGIライブラリから書いたな。
でもこれは特殊な例かもな。漏れが上司にわがまま言った
だけだから。
>>889
バカハケーン
889なのにカコワル
892デフォルトの名無しさん:02/04/10 00:28
>>890
なんで特殊な例なの?

ちなみにCでCGIってどうだった?
掲示板が作れればどれも簡単でしょ?
>>890
漏れも、5年くらい前にCでCGI書いたときは、ライブラリ書いたよ。
CGIのインターフェイスの解説書しか手元になかったから。
今なら、特殊っていうか、わざわざそんなんしなくても、って感じだね。

(本当はどういうふうに言うのが良いんだろう、CGIプログラム?)
>掲示板が作れればどれも簡単でしょ?

>>894
892は掲示板が一番作るのに苦労すると思っているんだからそっとしといたげて
896デフォルトの名無しさん:02/04/10 01:22
あ、あんたら解かってない。
掲示板にCGIの全ての技術が詰まってるんよ?
マジデマジデ

あとは肉付けだけ。
897デフォルトの名無しさん:02/04/10 01:29
896が正解
898デフォルトの名無しさん:02/04/10 01:30
896は掲示板厨房
そうは思わない。
900900:02/04/10 01:33
900は俺。
>掲示板にCGIの全ての技術が詰まってるんよ?

ア,CGIのことね。
了解
>>896
最近の掲示板はRDBMSまで使うんか。おおがかりだねぇ。
903902:02/04/10 01:41
>>901
いや、漏れも最初そう思ったけど、なら>>890>>893の言うように、
ライブラリ書いて終わりだよね。
まぁCGIが理解出来てりゃ後は他のアプリと同じだしな。
905デフォルトの名無しさん:02/04/10 03:22
902がカコワルイではないか
906902:02/04/10 03:28
シクシク
907901:02/04/10 14:19
だって俺CGIのことなんも知らないもん
CGI:C langage Gloval Integer
要するにC言語のint型のグローバル変数のことです。
代表的なものとしてerrnoなどがあります。

Common Gateway Interfaceの略語という説もある。

909デフォルトの名無しさん:02/04/10 18:58
先生!Cで他のプログラム(.exe)を呼び出すにはどうすればいいんですか!!
system
CreateProcess
CoCreateInstance
ShellExec
ShellExecEx
popen
open2
_topenと_ftopen、どっち使おうかいつも悩む。
バイナリ読み書きしかしないときはやっぱ_topenのほうがいいの?
_ftopenはバファリンでパフォーマンスが向上するってのがちょと気になる。
それぞれの特徴を教えてちょ。
頭痛に効きます。
914912:02/04/10 22:41
う〜〜ん検索しても見つからないなぁ。
せめてソースが見れればいいんだけどなぁ。
915rain:02/04/10 23:24
先生っ!!馬鹿にされるかも知れませんがC言語ではDOSプログラムしか作れないって本当ですか?
大嘘です。
うそです。
918rain:02/04/10 23:28
じゃあちゃんとしたIEみたいなのも(?)作れるって事ですかっ!?
まともな開発で使われていたのはDOS時代までという意味ではホント
作れる人なら作れます。


大嘘です。
>>919
PCでしょぼい仕事しかしたことないやつ。
Cは神です。何でも作れます。
923rain:02/04/10 23:31
う〜ん・・・BCCでも作れるんですか・・?
>>923
作れる人なら作れます。
先生! IE って「ちゃんとした」アプリなんですか???
hello, worldの次くらいにちゃんとしてます
927912:02/04/10 23:35
くだらないネタのせいで俺の質問が流れていく・・・
八つ当たりします


氏ね>>924
つーか今からC覚えてどうすんの?
趣味でやるにしてもちょっと凝ったことしようと思ったら
むちゃくちゃプログラム長くなるし、
仕事にしても先細りになることが保証されてるし。
もうちょっと時代の流れを読めよ。
これだからドキュソは・・・。
もう二度とこのスレに来なくていいから>929
>>929はCがわからなかったのでやつあたりしちゃってます。
>>929
じゃあ何がいいんですか?
933rain:02/04/10 23:43
>>929
それでもいいから来てるんですよ!!
ここは低学歴低賃金の落ちこぼれの集うスレですか?
935デフォルトの名無しさん:02/04/10 23:48
教えてください
K&Rの演習ができれば取りあえず初心者から抜け出したということになりますか?
最近頑張っているんだけどこの先に不安があるもので・・・
>>934=929
奴辺りですか?(プ
>>935
2chで「あなたはもう初心者ではありません」って言われたら安心するの?不
安でもひたすらプログラム書いた方がいいんじゃないですか?それが楽しくな
いならやめればいいし。
938rain:02/04/10 23:53
Cを使った代表的なwinアプリってなんですかね?
ピュアCで書かれた代表的なウィンドウズアプリなんてあんのか?
>>938
windows95
wordpadもcだな。
たしか、VSにサンプルついてた
942デフォルトの名無しさん:02/04/10 23:56
>>929は真っ先にHSPを覚えてしまい、Cに移行できなくなったドキュソです。
943rain:02/04/10 23:57
>>941
それ聞いて安心しました。どうもありがとうございます。
>>941
ワードパッドはリッチエディット使ってると思うが、アレの内部もCなのか?
>>912
_ftopen と _topen なるものを知らないので何とも言えんが、
名前から察するに高水準/低水準の入出力か?
たぶん _ftopen は中で _topen を呼んでるだろうから、
本気で書くなら _topen の方が多少は速くなるかもしれない。
が、数バイトずつ読んでくみたいな使い方をするなら、どうせ
自前でバッファリングしないことにゃ使い物になんないから、
結局 _ftopen と同じことをやることになるんで、最初からあるものを
使った方がいいのでは。
#include <windows.h>
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
char szWinName[] = "MyWin";
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
    HWND hwnd;
    MSG msg;
    WNDCLASSEX wcl;
    wcl.cbSize = sizeof(WNDCLASSEX);
    wcl.hInstance = hThisInst;
    wcl.lpszClassName = szWinName;
    wcl.lpfnWndProc = WindowFunc;
    wcl.style = 0;
    wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcl.hIconSm = NULL;
    wcl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcl.lpszMenuName = NULL;
    wcl.cbClsExtra = 0;
    wcl.cbWndExtra = 0;
    wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    
    if(!RegisterClassEx(&wcl)) return 0;
    hwnd = CreateWindow(
            szWinName,
            "Windows 2000 Skelton",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            NULL,
            NULL,
            hThisInst,
            NULL
            );
    
    ShowWindow(hwnd, nWinMode);
    UpdateWindow(hwnd);
    while(GetMessage(&msg, NULL, 0, 0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message){
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
これをコンパイル( bcc32 -tW hoge.c ) して実行してみれ。 >> 923
#include <windows.h>
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
WinExec( "explorer", SW_SHOW );
return 0;
}

むしろこれだけでエクスプローラの出来上がりだ、IEも近いぞ。
>>946
なんかWinアプリ作ったこと無いようなソースだな
>>939
秀丸は?って最近は知らんけど。
>>948
どう見てもWinAppのスケルトンですが?
MFCしか使ったこと無い様な発言だな。
>>950
1 RegisterClassでエラー判定しているのに、CreateWindowで判定してない。
2 ウインドウの背景色をGetStockObjectで拾ってきている
3 文字列をASCII前提で書いている
4 文字列定数(クラス名)の定義がconstポインタではない
952912:02/04/11 00:12
>>945
サンクス!
_topen=>_open,_tfopen->fopenだと思ってくだされ。
やっぱりちまちま読むときはバッファリングが必要ですか。
じゃぁfopenに統一しよう。今後悩まないように。
>>952
そう言う棲み分けじゃないと思うが・・・。
移植性の問題だと・・・。
954912:02/04/11 00:14
移植性?
fopenと_openで移植性が違うんすか?
955デフォルトの名無しさん:02/04/11 00:15
あーあこりゃ致命的だな(w
956912:02/04/11 00:18
>>955
それ漏れ?
マジで、そんな話聞いたこと無いよ。
どっちもANSI互換でしょ?
>>956君じゃないその前の人
958946:02/04/11 00:31
>>951
まあ、苦情は Herbert Schildt 先生に言ってくれ。
>>957
ほっとしたよ(;´−`)
>939
WWWCがC+SDKだったような。
961日下部圭子:02/04/11 00:50
http://pc.2ch.net/test/read.cgi/tech/1018453690/l50

新スレ作りました。
スレを使い切るとすぐ倉庫行きになって、見れなくなるので、
使い切る前に早めに移行をおねがいします。
962end:02/05/10 21:34

963end:02/05/12 20:59
ゆっくりと・・・


ゆっくりと・・・


だが確実に・・・


沈んでゆく・・・



もう誰にも・・・


止める事は・・・


できない?

test
965end:02/05/12 21:46
>>964
止めてないw
966デフォルトの名無しさん:02/05/17 01:44
浮かべーーーーーーーー!!
967デフォルトの名無しさん:02/05/17 01:45
浮かんだーーーーーーーーー!!
968デフォルトの名無しさん:02/05/17 01:46
いぇーーーーーーーーーい!!
さげよーーーーーーー!!
もうどうでもいいからさっさと1kまで埋めてくれ

どうせだから何かネタを残すべし。
      |\-/|
    / ̄ ̄ ̄\
    / __・△・__ 丶
   ノ イノノハ) ))ハ |   / ̄ ̄ ̄ ̄ ̄ ̄
   | 川 ● ● 川| <  電気を…
   ∪'丶 ー ノ ''∪   \______
     | ̄ ̄ ̄|
     / ̄ ̄厂ハ
     / )  ○ ( \
   ○ノ     丶○
    (⌒⌒⌒⌒⌒)
     ⌒|⌒|⌒|⌒
        |vv|vv|
     /__|__\
      ノ ' '⌒ \r⌒'、
  ∩  ( ハ( )) \ 、 )    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( )  )(・ (・ _) w'  <  大切にねっ!
  | |  (  ▽  ノノ      \_________
             _
           〃  V/⌒、
         nl/λ   |||  ||
       /⌒つ = 人_ノ、
      /  <Z) ニニ、ヽ___ ヽ
      /  ,  ,) ( ・ノ /⌒l/と二`ヽ,
     /    ̄).,へ、 っ´⌒〈)Y二  〉
   /(ノ  ノ~( /^^'ー=ニイ ) |/_ュ  〉
   / .\/_) ヽヾ___/ノ ヒ'  /
   |    /   `ー――‐'´  ) (、
  .|    /    γ・v・ 、   ,/ |/ ヽ
  |    | /|  (  ,l、 ,)_ λ'(_ノ  \
  |    |/ | (´____,~ )| ヽ\   \
AAは小さめに
  ⌒ ⌒ヽ. 
 ′.从 从 ゝ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ノ从 ゚ -゚从_ < 1000はもらったわね。
  ./ |又|ヘ_   \_________
  .L |_| _/つ ))
  .U ||||| |
  .L_LL|_|
   (__)__)
ラスト20
  ∧ ∧
  (,,・∀・) 
〜(_uu


  / l l | | | | | l ヽ  / ̄ ̄ ̄
  | | ノ   ヘ | |< きたな
  ヽヽ ̄ _  ̄ノ/  \
    / _ ヽ        ̄ ̄ ̄
    | |_| |
    | | | |
   /ゝ__χ__ノヽ
  /   ||ヽ
 /____山_|__ヽ
    | | | |
   ゝ__χ__ノ



     ,  ´ ̄`´ ̄ ̄ ― 、
    /              ヽ
  /      / / || ヽ        ヽ
  !    /  /// | |ヽ\\      !
 |   / // // | ||ヽ\\      i
 l .,-、| 二二    二二_\ ,-、  |   / ̄ ̄ ̄ ̄ ̄
 ! | 6| ´ ( 、)ヽ  ´ ( 、)` |6 |  | < 月島雫です。
  |ヽ_|  "   ,,    ""   |_ノ  |   \_____
  !  \   、__,     ノ  ,,!!
   ゙! !.i i`,、 _   ___ /i.i l !!"
      _ |   ̄  | _
     ̄ \´     `/  ̄
      ______
    /          )))
   /   /// /―――-ミ
   / 彡彡 // /      ヽ))
   / 彡彡 iiiiiiiiiiiiiii  iiiiiiiiii|     
   / 彡彡 < ・ > 、<・ >l
  /    |       ヽ   〉   
  /  ( | |      __)  |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  /   | ≡  /, ―――  |ゝ < 1000は士郎にはやらん
  /   |   |  L ___」 l ヾ  \_________
_ミ  l   ______ノ ゞ_
  |  l ヾ    ー   / |  l
  |  |   \ー    ‐/  |  |
      ____,,,,,,,,,,,,,,,,、、、
    /            )))
   /    ______,,,ノ
   /    l /    \\ヽ|)
   |    | ''''''''''    ''''''''|     
   |    | (  ・ )   ( ・ )l
   |     l        l  |  
   |  ( ~         _)  |
    |   |      ,―――. l   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    l .|ヽ    ー――' /  < あの男にだけは1000はやれない。
    ヾ |  \____ノ    \_________
  __/ヽ\      | l\_  
 ̄     λ ヽ     / .|    ̄
      ,; ⌒  ⌒  ⌒ ヽ 
     (     _____ )
    (   /        ヽ
   (   l   ⌒     ⌒ヽ
   (   ヽ , ―― 、  , ―‐‐、  
    (   〉=| ( ・ ) |⌒| ( ・ ) |
    (  |  ー―‐'  ヽ ―‐'
     ヾ(6 ヽ    (  :::::) 、)   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       l     _____) < くぉら 山岡!
        l   ( ___ヾ'    \_________
       | ヽ _____ノ
   __/ヽ\      | l\_
  ̄   \ λヽ     / .|     ̄

     _______
    /          \
    |    υ       |  
    /  ___   __  |           
   ( | 6--|<・>| =|<・>l -|
    |      ̄  〉  ̄ ̄ |
    |   υ ___   |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |  //‖ ‖    |  <やっぱ山岡はすごいや 
    |   | L ___」  l    \________
    \  ______ノ
     /ヽ       /\  

   ,,.-ヘ-へ-ヘ-'^ー^-ヘ-、ハ-へ-、,,,
 S^;;;:::;;;::;;::;;:;;;:;i'''ヽ;;;/''''i;;::;;:;:;::;;:::;:;;;:;乙
 ろ;;;;;;;;;;;;;;;;;;;;;;;l,,_ _,,l;;;;;;;;;;;;;;;;;;;;乙 / ̄ ̄ ̄ ̄ ̄ ̄
   `b^b^b^b<二>H<二>b^b^b^b′ | 1000ほしいの?
.         ヽ._,ニ、_ /       < えらいねェ〜
        ,r┼---‐|―i_,,,,      \______
   __,,r〜llll/ヘ|___ノ∧| ||| ̄^>、
  〃 ヽモl,|||  |    |__||| /';  l
   〉‐' └、lll_|__,..-‐''";;;;\_,〉 ヽ〈
  l ;  ,.-''"   ~`ヽ;;;;.:=‐''"‐-、  .l
  ┃┃┃┃
  ┃ ┃   /ヨ⌒彡
 ┃  ┃ r/ヲ 冫、 )
      /\ヽ_`__0′ ━   ┃
     ノ;;;:::::::::/       ┃   ∧∧∧∧∧∧∧∧∧∧
    /;;;;;;::|::::/|    ━━┛  < おれは          >
.   〈;;;::::::|:::〈 l    ィ'^'^'"'''z  < コテハンをやめるぞ! >
    ヽ|:::|::::::ヽ.  乂(^ミ、了   < ジョジョー―――ッ! >
    |、|::::::::: ̄`m|ヰ戸 6)    V V V V V V V V V V V
   | 、lヽ:::::::::::lヨ |Eヲ/|ヨ

   ミ髪巛巛川髪髪髪彡
   ミ髪髪髪巛川髪髪髪彡
   髪   /////   髪髪ミ
   髪   ///    髪髪
   | _ヽ /∠__  髪
   |《 ΘΨ 《 Θノ   髪
   |ミミ | | )   = ≡|∂)
   |ミ  Ц/     ≡|ソ   / ̄ ̄ ̄ ̄ ̄
   |ミ       ┓  ≡|  <  グッド>>989!!
   |ミ†三三彡┃ ≡/|    \_____
   |  ¬       / |┐
   |   」     / ノ├ー─ヽ
 /√ヽ──−´ / ノ \
 \> ▼ < ̄/ ┌─┐
    ▲   ┌─-|_ []|
    ■   │  人   |
    ■   │┌──┐|
        └ |__ |
         (     |
         ├── |
          |__ノ

) おのれ
) 1000取り合戦とは面白そうな
) 斬鉄剣の錆にしてくれる!!
)
⌒⌒⌒⌒⌒|/⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒
         , ‐‐‐  、
       /      \
     /         \__,,::::‐―‐::;,__
    _ノ                    ト、
  /                       \
  l     、―‐>‐‐、             \
  \   ir=`''‐,イ>  \トヽ           \
   \_ \fi>i ー   | レ'           \
       | !. ノ  _  ノイヽ.       ┌‐:、ヽ
      ! !、ヽ .//>  | ヽ_____>‐´\|
      ヽ \ ヽ<  /  \_` ‐:.、   \. \
   / ̄ ̄`ヽ、\___/_‐:___ \_`:.‐:..、  \. \
  ./      ̄ ̄ ̄    .\ `‐:..  \ \  \. \_
  |     / ̄,,>―――::、__`‐ト__\ \  >、 >‐`>、
  ヽ    /  「           ``ー――――´ X´_//>、
   \  `   |                      _,L///
    |     \____.,::::::::―――――――‐、  ^L|ヽ, \
    ヽ、    !、      !、   ヽ    \|   |  \__/\/\
     |\    \      !     !、    `i.  !、   \  \ \


                         ∧_∧ /
                        ( ´∀`/)
                        (  /  )
                        |/ | |
                        /(__)_)
         ‐.、‐'´`
      ,i´         ヽ
.     /             \
.   |              \
.    |                 .|
    |  / /  /  / / |  ヽ..|
.  ./  / / .. / / / / |   |.
  | / /  / / /    |    |
   V | ````' ‐   -‐'''''''| |⌒|
    || ,.___   ___,.  | |  )
    ヽ|    |  .    || ノ|
     |   |  `‐-.  |  |
     |   ヽ          |
     ..|   _____  '    |
     /|     __    /   |
     |/|ヽ        /   |/
      / |\ .    /|   /
      | .|  ヽ.  / |
       |   ''"  / ̄ ̄
         Λ   /   
┌────  ────
│またつまらぬ
│ モナーを斬ってしまった
└──────────


             ,. へ、___
            r'        \
            |         ,>
            /‐、__    i´
    ___,――´エ_、    ̄`ー l
    ー―、__、   ー‐、____iニヽ、
     /     ̄`ー、_        ,`>
    i'´        r‐ゝヽ、ー―フ<´´       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  , ―‐´ ̄` ‐、    | iニ!、ヽ‐―´   ,>       | おい、五右衛門
/  / 、   ヽ.   ヽ,、_ヽ.ヽ     (,、    . < 1000は俺のもんだ
  /   \   ト‐;/イ    \\   / ,i、__/レ,i.  \_______________
 ∧     \ |   ヽ. , へ.ヽ ヽ、__、 /   ーノ 
  ヽ.     、ヽ| i  `v、   ̄ヽ、      <ノ          r__、_      ,‐ァ
   ヽ.    Y b/ /ヽ/      ヽト、_、k―´       ,、 ,_,.―'/ニニニl‐¬' ̄ ̄ ̄ ̄ ̄)
    i     i l./  iく                    >;´,,‐――‐、ニハ rf―‐―――´
         | i´`i―〈 ト、          ,‐、_  ,,,‐'''´´  ニニi、‐ ) r‐´
         |/ / ./| ヽ. ̄`ー、__,;;:――´´ `ヽ `<´ ``` `   ニニ`Y´
             _」,, ヽ‐'''''´      ,,ノ|   `i |   `` ``,、_ `ヽ
                      __,,,/  ト‐‐'´L/ヽー―r'''' ̄  `;L/
                    ‐'''´  _,,, ‐―'´     .L___,,,ノ



             _______
            /           \
          /              \
         /                 \
         /                   \
         l         / ̄ヽ        |
         l  /\   /     ヽ       |
         | /   \/        ヽ     |
         |/ ━━    ━━━━━   _  |
         |   / ̄\    ( ̄/\  ヽ / \|
         il  |  / il    ヽ l  )  V    ヽ
         (ヽ  ヽ_ヽ/ /      ̄ミ ミ   | |/ヽ |
          |     /           ||ヽ//
          |    ヽ           ||ヽ/  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          |    ______,  ///  .| んーなこと言うなよ
           |   ´、|  |  | /  ミ |   < 次元
           i    \.  |  レ     ミ    | マターリいこうぜ
            l     ヽ┴/     /|     \________
            \    ━     /  |_
              ヽ       _/  ,/|
               ヽ__ /__/  |、
              ///    \.     |
             / / |    / \.   /
             ̄ ̄ /⌒ヽ/   丶/
               /  ヽ


              _ー‐' ̄' ̄ ̄ ̄ヽ_
            /                \
          /                   \
         /                     \
        /                        ヽ
       /                          ヽ
      /                            |
      /               |              ヽ
     /         \  ヽ  ヽ  ヽ  \       ヽ
     |       ヽ   \  \  \  ヽ  ヽ       ヽ
     |ヽ    (  ヽ\__彡_メ==\_)        |
     \  ゝ \__/__      ヽ ̄|⌒)″)        ヽ
      \   ヽイ /人くヽヽ     \>イ  ノ         \
        \_ \ "\u゙')         /          \
          |   \    j        /            )  ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ノ    ヽ    ヽ)      /              |  |  おじさま!
         /     ヽ     iー.、   |              / < 
         |      ヽ、   `´    |           ) /   |  1000は渡しません!
         (        ` .、    /ヽ(       / / /    \________
         \\(\__ヽ\__>‐ イ    |\___// ̄
                   /       |


      /::::::::::>、_
      ,:::::::::::/   i::ヽ、
     ./:::::::::/    .i::::::i ,.:‐:.、 li lヽ
     l::::::::::i .i.    l::::/:::::::ー:::‐:::::::l
     |:::::::::|. |     |::::::::::::;::::::‐::::::::'、
 /  /::::::::::| i'     i'::;/::::::::::::::::::::::ヽ
 i`::‐::::::::::::::!i'     i'V:::::::::::::::::::::::::::::::::::i
 \::::::::::::::::::i     |::::::::::::::::::::::::::::::::::::::::i
   /:::::::::::::|     !:::::::::::::::::::::::::::::::::::::::::::、
  /:::::::::::::::::::i     |:::::::::::::::::::::::::::::::::::::::::::::ヽ
 i:::::::::::::::::::::|     |:::::r‐_ノ‐´―::::::´::::ノ::::::::ヽ
 !;;::::::::::::::::::|     ト::/ ゞi;;ニ> ー‐‐イ:::;:::::::;)
  i::::::::::::::::|     .L,!::!  `" ^´ ,i;;iヲ;''ノ:::::::;;ノ
 , ):::::::::::::;l     !:;:: `     i`´/::::;;;;/  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ヽ‐;:::::::::::|     l/ :.   .'、_ '´, ' イ、   | バカね
  ー‐´!::;!     li、 `、 `‐´ イ::::::::::ヽ.. < 1000は私のものよ
      |   i  .l;;;i  `ト:::::::::::::::::::::::::::/.   | カネニイトメハツケナイワ
      |   i'   l;;;;ヽ_ i::::::::::::::::ノ '‐― 、  \________
     .|.   i   .i;;;;li;ヽヽ!、_,,,      .!
      !      l;;;;;;;;;;;;;;,,         ,ト‐.、
      i     l;;;;;;;;;;;;;;;;;;;,,     `ー:.、l ト、
       !、    l;;;;;;;;;;;;;ヽヽ;;;;,,  .、    /;;/,
       ヽ   l;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,  ` 、 /;;/;;;i
        \  !;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,_  .v;;;;;;;;;;;/


               __
        ( ̄ ̄ヽニニ_, )
        冫        |
        / ̄^-―――′ヽ
      / |            ̄\
    /  ヽ______/  /
   く               /
    ー―、___________イl 
      /ヽ| く て .| |.ノ-|(  
      |ヽ | / ´ヽ-^ L^  く |
  ,――/|( )| |    、__ )  / |\――__
/  /  ヽ | |  ____________  | |  \_ | \   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  /     |.| |∠--i-i--i-ヽ| ゝ   \ く  <  1000取りとは許さん逮捕だ
  |      儿 (  ̄ ̄ニ ̄  く    / /   \____________
ヽ \    ヽ\/        )  /  ヽ
、フ  \    \`ヽ_______へ―′  / |   |
   _____フ    |   /  \  |    ̄|   |
   ヽ       |  |    |  |    /   |
             _______
            /           \
          /              \
         /                 \
         /                   \
         l         / ̄ヽ        |
         l  /\   /     ヽ       |
         | /   \/        ヽ     |
         |/ ━━    ━━━━━   _  |
         |   / ̄\    ( ̄/\  ヽ / \|
         il  |  / il    ヽ l  )  V    ヽ
         (ヽ  ヽ_ヽ/ /      ̄ミ ミ   | |/ヽ |
          |     /           ||ヽ//
          |    ヽ           ||ヽ/  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          |    ______,  ///  .| んーなこと言うなよ
           |   ´、|  |  | /  ミ |   < とっつぁん
           i    \.  |  レ     ミ    | 1000モラッタ
            l     ヽ┴/     /|     \________
            \    ━     /  |_
              ヽ       _/  ,/|
               ヽ__ /__/  |、
              ///    \.     |
             / / |    / \.   /
             ̄ ̄ /⌒ヽ/   丶/
               /  ヽ


      ___
    /      \
   /      L  |
   |   ===========‐
   |  | \  / |
   |◯ |  ・   ・ |
   ヽ  ノ   ⌒  |
   /  ̄        ヽ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  /|  )_____ |\< いただき!!
/ λ         ノ  \\________
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。