C言語のことは漏れらに聞け!!<40>

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C 言語ならオレに訊け。

C 言語じゃないなら訊くな。
問題をちゃんと切り分けて、C の話かそうでないか洗ってから質問してくれ。

つーか訊く前に Web で検索しろ。

コンパイラ探してるなら >>2 を見れ。

GUI とか、C 標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
ソース丸投は別スレがあるから他に逝ってくれ。
宿題は別スレがあるから他に逝ってくれ。
書籍については別スレがあるから他に逝ってくれ。

・前スレ <39>
http://pc3.2ch.net/test/read.cgi/tech/1036409391/

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/
2デフォルトの名無しさん:02/11/07 21:56
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
3デフォルトの名無しさん:02/11/07 21:56
>>1
おつ
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

http://big.freett.com/scheme_a/num1000.swf
1 乙カレー
<ヨンジュー>

とするのが礼儀であろう・・・。
>>4 はえーよ
>>1おっつかれー!
どうでもいいけどさ、
mallocとかreallocとかの
allocってどういう意味?
辞書にものってない・・・
10デフォルトの名無しさん:02/11/07 22:02
allocate
memory allocate
reallocate
12デフォルトの名無しさん:02/11/07 22:03
割り付けか!!
ありあとう
all OK
creat
>>1
おつかれ

でもスレッドタイトルもうちょっとひねれなかったの?
スレタイをひねる必要はない。
171:02/11/07 22:09
どうせ3日で終わるんだから、どうでもいいよ。
さて、3日ももつかな?
19前スレ944:02/11/07 22:12
あ。「マルチ禁止」 入れるの忘れたよ・・・。
20デフォルトの名無しさん:02/11/07 22:26
あげ
21デフォルトの名無しさん:02/11/07 22:29
C言語とは関係ないんだけど、SHIFT-JISの内字っていったい何文字あるんですか?
なんでCと関係ない話するんですか?
23デフォルトの名無しさん:02/11/07 22:35
>>22
すんません。
CでSJIS⇔UNICODEの変換ツールを作る予定だったもんで。
「内字」ってはじめて聞いた。
25デフォルトの名無しさん:02/11/07 22:36
int a = 38;
int i;
for(i = 0;i < 32;i++) {
if(a & (1 << i))
printf("1");
else
printf("0");
}

どうもうまくいきません。何がわるいんでしょうか?
>>25
数字を2進で表示するつもりです、とか何をするつもりで、
どううまく行かないかくらいかけよ。
27デフォルトの名無しさん:02/11/07 22:38
int a = 38;
int i=32;
for(;i--;) {
if(a & (1 << i))
putchar('1');
else
putchar('0');
}
(´-`).。oO(結局、>>1 に何書いても無駄なのかい。。。) >>21 >>25
29デフォルトの名無しさん:02/11/07 22:38
>>24
外字領域じゃないんで、「内字」でもいいんじゃないですか?
>>29
外人の反対を内人と言わないだろ。
内地人
内地って本州の事だろ
>>21
こういうレベルから全部、人にいちいち聞いて、
sjis、unicodeの変換ツールを作るつもりなのかい。
すげーな。
前スレでヘッダファイルについて質問した香具師だけど
こんなもんが出てきちゃったYO!

■C:\Documents and Settings\C\Pointer> bcc32 list4-8.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
list4-8.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_read_line' が未解決(C:\DOCUMENTS AND SETTINGS\C\POINTER\LIST4-8.OBJ が参照)

間違いなく、同じフォルダにあるYO!
read_line.cも.hもあるYO!
WHY???
bcc32 list4-8.c read_line.c
>>25
ビットが逆順で出るって事か。
if(a & (1 << (31 - i)))
だろ。
37デフォルトの名無しさん:02/11/07 22:44
>>33
やらなきゃいけないんで。
参考になるサイトとかあったら教えてください。
read_line関数がないだけだろ・・・・
ヘッダーファイルの問題じゃない。
39デフォルトの名無しさん:02/11/07 22:45
int a = 38;
int i=1<<31;
for(;i;i>>=1) {
if(a & i)
putchar('1');
else
putchar('0');
}
>>37
WideCharToMultiByte と MultiByteToWideChar で検索しろ。
>>35
サンクス
もしかしていちいちこれやんなきゃだめ?
>>34
read_line.c も同時にコンパイルしる。
>>41
CBar で検索しる。
44デフォルトの名無しさん:02/11/07 22:55
>>40
ありがd
>>41
MAKE使えるようになれば解決するぞ
46デフォルトの名無しさん:02/11/07 23:13
ブヒッ?
47デフォルトの名無しさん:02/11/07 23:17

クワッパ
48デフォルトの名無しさん:02/11/07 23:21
害厨に毒されて程度が著しく下がってしまった哀れなスレはここですか?
49デフォルトの名無しさん:02/11/07 23:21
       t    ww              /na
      h t p:/ / w.i-chubu e.   -h/marion
                 .n        vi
                jp/~tom o mi     / na gi?lin
                         vi.c     ks=20
          彡                        311

(,,ノ゚д゚)ノ
最近ようやくポインタが理解できてうれしい今日この頃ですが、
よくポインタを理解したら中級レベルと言いますが、
特定の分野に依存しないところで、
上級レベル、って言うとどんなものがあるのでしょうか?

最近いい気になってる俺を打ちのめしてください。
while文はループの制御を制御する文で判定に使う式が真である間、ブロック・文・空文を繰り返し
実行する。無限ループを作りたい場合は条件式に0を入れれば良い。

これって正しい?
#define kazu(x) kazu(x)*(x)
main(){
int i , j ;
i=kazu(3);
j=kazu(1+4);
printf("%d\n",i);
printf("%d\n",j);
}

されにこのマクロ終わんなくない?
>>51
マゾでつか?
前橋本に文句がつけられるようになる。
56デフォルトの名無しさん:02/11/07 23:32
条件式に1
とりあえず、7行プログラミング板いってみ
オレはぶちのめされた
7行でオセロできてたYO!
あれは特定の分野に依存してる・・・かな?
常に真のループはwhile(1)よりfor(;;)がいいと思うのであります。
>>60
なぜ?
てか>>58のサイトひどいね
>>51void (*signal(int signum, void (*sighandler)(int)))(int);この文で宣言されている変数とその型は?
6360:02/11/07 23:42
>>61

whileだと少なくとも"1"を意識する必要がありますが、
for(;;)だと何も意識しないことが期待される動作につながるからであります。
>>58
問3(2)、0 でも 1 でも正解で、2以上の数値 と -1 で不正解なのは意味不明。

>>60
最適化がかかれば 2 つに違いは無い。
最適化されない場合、for(;;) が無条件でループするのに対して while(1) は
毎回 1 を評価する。
>>62
えーと、
signalは、返却値なしで引数intの関数へのポインタを返す関数で、
引数はintと、返却値なしで引数intの関数へのポインタの二つある!
キタ━(・∀・)━!
>>64
0正解?
間違いだろw
Cの真と偽の定義知ってる?
6766:02/11/07 23:48
>>64
すまそ。問題の方ね。
ただの写し間違いとは思えないから
あのサイトの管理人がまちがってんだろ
>>62
前橋・・・
>>65

返り値の型がvoidなのは、返却値なしとゆーより、
返却値はどう使ってもい〜よ〜だと思っていたが、違うかな?
void *とごっちゃになってるかな?俺。
>>69
でもvoid kansu(void)とかでreturnすると
警告でない?使えないんでない?
てかvoid*ってなんだ?
71デフォルトの名無しさん:02/11/07 23:51
return;
は使える。
>>69
間違い。voidを返す関数というのは何も返さない。
使おうと思っても何も返ってこないのだから使いようがない。
7369:02/11/07 23:53
>>72

レスTHX。やっぱ勘違いしてました。

>>70
void *は何にでもキャストできる汎用型。
オブジェクト指向〜とかポリモーフィズム〜なんてので使った記憶あり。
>>65
char array[5][5];
上記のarrayの型を引数としてarrayの型を返すような関数ポインタfuncpを定義したい。
どうすれば良いか?
char (*funcp)(char array[5][5])[5][5];
>>62
A: int 型の signum
B: int 型の引数を 1 つ取る void* 型関数へのポインタ型の sighandler
C: int 型の引数を 1 つ取る void* 型関数へのポインタ

引数 A、B を取り、C を返す関数 signal のプロトタイプ

変数なんか宣言されてる?
77デフォルトの名無しさん:02/11/08 00:03
void (*sighandler)(int);
ってわかる?
>>76
されてるが…。
>>64
俺もそう思った。0以外はみんな正解じゃん。
〜以外を入れるという問題かと思って見直しちゃったよ。もしそうなら0が正解だから。
80デフォルトの名無しさん:02/11/08 00:09
void *(*sighandler)(int);
>>78
仮引数の間違いじゃないのか?
教えてくれ。
変数が定義されているなら、62 のユーザー定義識別子のどれかから sizeof が
取れるはずだが、コンパイルエラーになるのは何故だ?

C++ だが、76 の則って
void (*signal(int signum, void (*sighandler)(int)))(int);
typedef int A;
typedef void (*B)(int);
typedef void (*C)(int);
C signal2(A, B);
とした場合、
cout << "signal : " << typeid(signal ).name() << endl;
cout << "signal2: " << typeid(signal2).name() << endl;
この 2 行は全く同じ結果になる。

>>77
76 の B。
解答ページより
> while文はループの制御を制御する文で判定に使う式が真である間、ブロック・文・空文を繰り返し
> 実行する。無限ループを作りたい場合は条件式に"0を入れれば良い"。

ハァ?
>>77
intをひとつ取り、値を返さない関数へのポインタsighandlerじゃないの?
8477:02/11/08 00:17
>>83
すまん、そーだ。
int *(*pf)(int);
上のポインタ型を返す関数(引数はint)
int *(*(*ppf)(int))(int);

上のポインタ型を返す関数(引数はint)
int *(*(*(*pppf)(int))(int))(int);

上のポインタ型を返す関数(引数は上のポインタ)の配列(サイズは10)
int *(*(*(*(ppppf[10])(int))(int))(int))(int *(*(*(*)(int))(int))(int));
8684:02/11/08 00:22
漏れ 77 じゃなくて 76 だよ・・・鬱
8762:02/11/08 00:23
ごめん、プロトタイプだった。

こう書けばよかったね。
void (*(*signal)(int signum, void(*sighandler(int))))(int);
>>85
二番目は関数ポインタ(?)を返す関数へのポインタと考えればいいのか?
最後間違った!
int *(*(*(*(*ppppf)(int *(*(*(*)(int))(int))(int)))(int))(int))(int);
9081:02/11/08 00:26
>>88
内側から 1 コずつ typedef していけば、なんとなく分かるよ。
s/ppppf/ppppf[10]/
>>75は正しいのか?
>>92
char array[][5]でいいと思う。
しかし、関数ポインタのネストって普通しないんじゃないか?
するにしても、難読になってくる前に typedef すると思うんだけど。
85-89 みたいなコードを生で書いてる(書く方針の) 人っている?
>>93
74 を見る限り、引数は char array[5][5] でいいだろう。
関数へのポインタを返す関数の使い道が経験の浅い僕にはわかりません。
9785:02/11/08 00:39
なんだか説明が変だな。
正しくは、「上のポインタ型を返す関数(引数はint)へのポインタ」だな。
しかも間違ってるし。>>91thanks

>>94
ふつうはせいぜい関数ポインタを返す関数までだな。
それでもtypedefする。
まあ、パズルというか言葉遊びということで。
C FAQの14.5:
2つの浮動小数点の値が"十分近い"ことを判定するよい方法は。
http://www.catnet.ne.jp/kouno/c_faq/c14.html#5
を見て思ったんですが、精度の敷居ってどういう事でしょうか?
epsilonをどのように選べばよいのかわかりません。
>>96
関数テーブル
int Hoge(int a) { return a + 1; }
int Huge(int a) { return a + 2; }
int Hage(int a) { return a + 3; }
int (*funcs(const char *funcname))(int)
{
if(!strcmp(funcname, "Hoge")) return Hoge;
if(!strcmp(funcname, "Huge")) return Huge;
return Hage;
}
必要な精度にすればいい。
0.00000001でよかったらそれでいい。
>>99
<float.h> の DBL_EPSILON や FLT_EPSILON でも使ったら?
漏れもよくわからない。
<float.h> はいろんな定数が定義されてるよ。
102デフォルトの名無しさん:02/11/08 00:44
int func(const char *funcname, int a) {
if(!strcmp(funcname, "Hoge")) return Hoge(a);
if(!strcmp(funcname, "Huge")) return Huge(a);
return Hage(a);
}
103デフォルトの名無しさん:02/11/08 00:44
>>98
精度は型によって違うから。(固定or浮動小数,バイト数)
104751:02/11/08 00:51
ep_dash=(double)a/b-1.0
if(abs(ep_dash))...
とかは?
10598:02/11/08 00:51
>>100
>>101
>>103
なるほど、どういうものか大体わかりました。ありがとうございました。
>>102
呼び出しが必要なたびに strcmp() 走らせるの?

>>103
>>98
> 浮動小数点の値が
107751←関係無し:02/11/08 00:53
>if(abs(ep_dash))...
if(abs(ep_dash)<0.0001)...
「104の訂正」
めちゃ解り辛いな
108751:02/11/08 00:58
関係無しって言うのは 
751という数字がという事だ。悪いな何度も
max(a,b){(abs(a-b)+abs(a+b))/2}なんてあったな、そういえば。
あったあった、で、なんでいきなりmax?
多分このコードより三項演算子の方が速いな。
>>99
関数テーブルって言うなら
funclist[]={Hoge,Hage,Huga};じゃね?
俺ならenum,switch使うな。
文字列比較なんてたるくてやってられね〜。
ふむふむ
3時間で100か・・・
このペースだと3日もたない・・・
>>109
あっ、a,bが負の場合違うでしょ、それ。
足し算の方は絶対値取らなくていいべさ。
reallocって重いの?
>>115
軽いとは言えないが不要な処理はしないはず。
ところで、何かと比較して言ってるの?
重い、重くないの基準は?
前スレでCbarなるものを教えてもらったんだけど、
コンパイル不能!こんなエラーが

Microsoft (R) KKCFUNC バージョン 1.10
Copyright (C) Microsoft Corp. 1991,1993. All rights reserved.

KKCFUNC が組み込まれました.

マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
かな漢字変換は組み込まれませんでした.
MSIMEK.SYSが登録されていません.
コマンドまたはファイル名が違います.

C:\DOCUME~1\C\PROJECTS\>

意味が不明・・・
free
して
malloc
しなおす
のに比べて
120デフォルトの名無しさん:02/11/08 02:09
>>119
mallocしてコピーして元の領域をfreeの間違いか?
>>119
全部消えちゃう
敷居(w
元の英語はthreshold(閾値、しきい値)だね。
「これ以下なら近い」等と判断する境界値の事。
>>98
わかんなかったらとりあえず#include <float.h>して
FLT_EPSILON使ってれば?
新たに別の場所に再確保すると言う事はreallocも元の領域はfreeしてる訳だから
関数呼び出しのオーバーヘッド位しか差は無いんじゃない?
>>123
reallocは通常、元の領域をいじるだけだと思うんだがどうだろう?
あくまでも通常ね。
125124:02/11/08 02:18
VC++でやってみた。
VC++ではreallocは他の領域に取るみたいだね。他のも大抵はそうなのかな?
だとすると>>123の言うとおりだね
実装によると思ふ。
VCではHeapReAlloc使ってるね。
ヒープのサイズ変更ができないOSでも、CRTが一気に確保して管理してる
処理系だと速い場合もあるかな。
127デフォルトの名無しさん:02/11/08 03:20
>>118
> コマンドまたはファイル名が違います.
という事は、環境設定で何か間違ってないか?

あと
> Microsoft (R) KKCFUNC バージョン 1.10
> Copyright (C) Microsoft Corp. 1991,1993. All rights reserved.
>
> KKCFUNC が組み込まれました.
>
> マイクロソフトかな漢字変換 バージョン 2.51
> (C)Copyright Microsoft Corp. 1992-1993
は 16ビットコンソールアプリ蹴った時にいつもでるからいいんだけど、
> MSIMEK.SYSが登録されていません.
初めて見た。
何か Windows そのものがおかしくないか?
128127:02/11/08 03:23
age ちゃった・・・。

追加。
16 ビットコンソールアプリが走ってるのも何かおかしい。
利用 OS は NT 系に設定してある?
>>122
すんげー遅レスじゃないかや?
130困ったさん:02/11/08 04:14
標準入力から数行のテキストファイル(ただし2バイト文字を含まない)を
読み込んで、それに行番号をつけて標準出力の出力するプログラム、誰かお
願い!!
それだけなら2バイト文字があっても問題ないと思うんだが。
132困ったさん:02/11/08 04:18
今アスキーコードならった所なんです、たぶんその関係で書かれてると
思うんですが。。。難しいことはわかりません。。
>>130
nl -ba < file.txt
134困ったさん:02/11/08 04:21
??すいません。。。わかりません
つか宿題なら宿題スレにいく
#include <stdio.h>
#define LBUFLEN 1025
/* 一行の最大長+1 */

int main(){
int line;
char buf[LBUFLEN];

for(line=0;;line++){
printf("%06d ",line);
if(!fgets(buf,sizeof buf,stdin))
break;
printf("%s",buf);
}
printf("%s",buf);

return 0;
}

テストしていない。
137困ったさん:02/11/08 04:24
すいません。。失礼なことはわかってたんですけどこんな時間に書き込んで
もらえそうになかったんで。。
138136:02/11/08 04:24
こたえちゃまずかったな・・
スマソ
139136:02/11/08 04:25
ん?
fgetsの仕様を勘違いしたかも。
forを抜けたあとのprintfはいらないな。
教えて君が一向に減らないな。
141困ったさん:02/11/08 04:27
ほんとすいません。。こんな時間に。。ほんとありがとうございますm(_ _)m
142136:02/11/08 04:33
行番号って0からじゃないよな・・・・
なにやってんだろ俺。
#include <stdio.h>
int main() {
int c, line=1, newline=1;
while ((c=getchar()) != EOF) {
if (newline) {printf("%06d", line++); newline=0};
putchar(c);
if (c == '\n') newline=1;
}
return 0;
}
do_something:好き
DoSomething:好きだったが教えて君でこの記法を使ってくる奴が目につき嫌いになった。
doSomething:使わないが嫌いでは無い。

prefix_do_something_preposition_something_sufix
#include<stdio.h>
int main(void)
{
int t[]={5,9,18};
int *ptr;
ptr = t;
printf("adress=%p\n",ptr);
printf("adress=%p value=%d",ptr,*ptr++);

return 0;
}
これの実行結果が
adress=0012FF80
adress=0012FF84 value=5
こうなったんですが、
なぜadressがインクリメントされてvalueはそのままなんでしょうか?
教えてくださいTT
146デフォルトの名無しさん:02/11/08 06:11
printf("adress=%p value=%d",ptr,*ptr++);は
printf("adress=%p value=%d",ptr,*ptr);
ptr++;
と同じ。
printf("adress=%p value=%d",ptr,*++ptr);
printf("adress=%p value=%d",ptr,++*ptr);
の違いはわかるかな。
147デフォルトの名無しさん:02/11/08 06:15
アドレスはなんで増えてるんだ?
>>146
printf("adress=%p value=%d",ptr,*++ptr);だと
ptrをインクリメントしてから値参照、よってaddress=0012ff80 value=9
printf("adress=%p value=%d",ptr,++*ptr);だと
*ptrをインクリメントするからaddress=0012ff80 value=6
になると思う。
printf("adress=%p value=%d",ptr,*ptr);
ptr++;
だと実行結果の2行目adress=0012ff84にならないと思うんですが?





括弧を付けた方がわかりやすいですね。
*++ptrこういう書き方はあまり好きじゃない。。^^;
150デフォルトの名無しさん:02/11/08 06:45
printf("adress=%p value=%d",ptr,*ptr++);は
printf("adress=%p value=%d",ptr,*ptr);
ptr++;
ではない。
関数の評価順は規格で決まっていない。
ptr++は評価した後に増やす。
最初ptrの値は0012ff80で
printf("adress=%p value=%d",ptr,*ptr++);実行時に
adress=%pのところはptr つまり0012ff80が表示されると
思うんですがなぜ0012ff84になってるんでしょうか?
>>151
だから>>150が書いてるじゃん。
printf()を呼ぶ際に3つの引数を評価するわけだが、その順番は規格では
決まってない。

printf("adress=%p value=%d",ptr,*ptr++);
は、内部的には
a = "adress=%p value=%d";
b = ptr;
c = *ptr++;
printf(a, b, c);
でも
c = *ptr++;
b = ptr;
a = "adress=%p value=%d";
printf(a, b, c);
でも、どちらの処理でもいいことになってる。
後者だったとしたら、なぜ>>151のような結果になるか理解できるでしょ?

実際、引数をスタック渡しするCPUでは逆順に積むのが普通なので、多くの
環境で後者のような処理になる。もちろん前者でやるのも規格上問題ないので、
「引数は後ろから順に評価される」という仮定もやっちゃだめ。
お願いします。Cで微分をするにはどうしたらいいのでしょうか?
>>126
遅レスだが・・・。
VC++のmalloc()系はHeapAlloc()系APIも使ってはいるが、
それは要求されたサイズが一定以上大きい場合だけだったはず。
通常はVirtualAlloc()系で確保したものを細切れにして返してくる。

malloc()系の方がHeapAlloc()系より遥かに高速だよ。
155118:02/11/08 10:37
ごめん。昨日の>>118だけど
MSIMEK.SYSってたぶん、CONFIGなんとかってファイルに書く奴でない?
前に猫を見てた時に、エスケープシーケンスが出来なかったから
なんか付け足した気がする・・・。ちなみにXPだす。
システムそのものがおかしいって言われたから不安になったんだけど、
誰かこのエラーの意味わかる?
分からんかったらどの板行ったらいいかな?
>>153
微分て微分方程式?
高校のやつ?
C++のMFCで、既に作られてるアプリケーションに新規にダイアログ(モードレス)
を作って表示させるにはどうしたらいいですか?

例えば、 ファイル→プロパティー でモードレスダイアログが出てくる感じにしたいんですけど。。

>>156
はい、そうです。正確には偏微分です。
こんな感じです。

fx= ∂f / ∂x
160デフォルトの名無しさん:02/11/08 12:44
・dF(x)/dxのルーチンを使いまわす設計にする。
・精度を考える。(精度次第で数値の扱い、ひいては速さを必要とする場合の
 アルゴリズムに影響される。)

16198:02/11/08 14:10
>>122
うお、これで完璧に判りました。誤訳だったとは…。
通りで検索しても出ないし、意味も不明だし。
ありがとうございました。
>>161
誤訳じゃなくて誤変換だろ。
そういえばぼーよー.comには定義城(定義域の間違い)ってのがあったな。OCRでも使っているのかな。
163デフォルトの名無しさん:02/11/08 17:15
ファイルオープンしてから、fscanf文でファイルの最後まで読みこんだあと、
もう一回ファイルの先頭から読み直すのはどうやるんですか?
164デフォルトの名無しさん:02/11/08 17:20
クローズしてもう一回ファイルオープンする。
165デフォルトの名無しさん:02/11/08 17:23
>>163
rewind()
すみません。初心者ながら疑問があるのですが、
Visual C++でビルドしたプログラムはWin9X上で動かないって事ですか?

あと、スレの最初にかかれてる問題って何なのでしょうか?
これらのプラットフォームは、デザイン時についてはサポートされない予定です。
この決定理由は、Microsoft Visual Studio 環境で利用できる
最先端のプラットフォーム機能の恩恵を開発者が
確実に受けられるようにするためです。
コードの実行については、Windows 98 以降の
上位オペレーティング システムでサポートされる予定です。

というところまでは探せたのですが・・・、
他の問題というのがいまいちわからずじまいで・・・。
>>165
ありがとうございます。無事ファイルが読み込まれました!!
これでレポートがはかどります
>>167
C/C++ の前に日本語は大丈夫?

> スレの最初にかかれてる問題

あなたの抱えている疑問、質問などの事。この場合は ↓

> Visual C++でビルドしたプログラムはWin9X上で動かないって事ですか?

で、これは C の話だと思う? 思わない?
170デフォルトの名無しさん:02/11/08 18:49
buf[0]-buf[3]
をintの変数に代入する場合はどのようにしたらいいのでしょうか?
int cnt = (int)buf;
と無理やりしてみたのですが、だめなようでした・・
>>170
まず buf の宣言を見せれ。
あと、「buf[0]-buf[3]」 は buf[0] から buf[3] を減算した結果と解釈して
よろしいか?
172デフォルトの名無しさん:02/11/08 19:08
最近、C言語に本腰を入れてやって見ようとやり始めた者です。
とある本を参照しながら勉強してるんですが、
いままで関数は main関数内で宣言してたんですが,なぜか違う演習だとヘッダ部分で関数を宣言してるんです。
この違いはいったい何なんですか?
>>172

main関数内ではなく、main関数と同じcソースの中で、だよね?

staticな関数ならそれを使用するコンパイル単位のcソースの中で宣言するけど、
そこら中から参照できる関数は、共通のヘッダファイルで宣言するのがセオリー。
コンパイルの精度を上げるためにね。
>>172
> 関数は main関数内で宣言

main() の中でプロトタイプ書いてるって?
それ C++ じゃないとできないぞ。
正確には main() 関数が書いてあるのと同じファイル内、じゃないの?
175デフォルトの名無しさん:02/11/08 19:17
こういうのか?
#include <stdio.h>
int main() {
int hoge(int x);
printf("%d\n", hoge(3));
return 0;
}
int hoge(int x) {
return x * x;
}
>>175
普通はしないよね。そんなこと。
172 はどこでそんなこと習ったんだ?
177デフォルトの名無しさん:02/11/08 19:20
はい!前橋の本に、「malloc()に皮をかぶせて・・・」
とか書いてあったんだけど、どういう意味ですか?
ま、まさか・・・
178デフォルトの名無しさん:02/11/08 19:21
>>175
そうです、それと

#include <stdio.h>
int hoge(int x);

int main() {
printf("%d\n", hoge(3));
return 0;
}
int hoge(int x) {
return x * x;
}

の違いを知りたいんです。
>コンパイルの精度
って具体的に何?
精度は違うだろ。速度だろ。


・・・角度かも知れないけど。
>178
C++なら、
#include <stdio.h>
int main() {
int hoge(int x);
printf("%d\n", hoge(3)); //合法
return 0;
}
int hage()
{ return hoge(3)*hoge(3);// えらー
}
int hoge(int x) {
return x * x;
}
の違いがある。Cでは、そもそも「非標準の拡張機能」らしいので知らん
ま、とりあえず人に物教えるときに脳内言語は使うなと
>>178
175 のソースは C じゃできない。C++。
(もしかしたら実際にコンパイル通るかも知れないけどそれはコンパイラ独自の拡張機能)
C では 178 の書き方しかあり得ない。
>>179
宣言なしの時に戻り値や引数がint扱いになっちゃうとかじゃない?
想像だけど・・・。
185173:02/11/08 19:30
>>179 >>180

ん?共通で使用する関数をヘッダファイルで宣言しておけば、
複数のコンパイル単位(cソース)をまとめてコンパイルしたときに
コンパイラが人間側の関数使用時のミスを捕捉しエラーにしてくれるよね?
すなわち「コンパイルが通ったときのPGの完成度」が上がるわけで、
これを「コンパイルの精度」と言ったのだが?
>>185
すごい国語力ですね
187デフォルトの名無しさん:02/11/08 19:34
K&Rでもやっている。
188デフォルトの名無しさん:02/11/08 19:36
>>183

#include <stdio.h>

main()
{
int test();

printf("%d\n",test(3));
}

int test(x)
int x;
{
return x*x;

}

これってCではダメなんですか?
LCIC-86試食版ではコンパイルできたんですが。
>>188
関数へのポインタの簡易記述のような気がしてきた今日この頃。
>>189
(゚Д゚)ハァ?
191デフォルトの名無しさん:02/11/08 19:41
#include <stdio.h>

main(){
printf("%d\n",test(3));
}
int test(x)
int x;{
return x*x;
}
}
>>188
> (もしかしたら実際にコンパイル通るかも知れないけどそれはコンパイラ独自の拡張機能)
>185
まぁそれをコンパイルの精度と呼ぶのかどうかは別として〜だ。
たしかにそれを追求していったのが最近の言語の流れだろうな。

でもそれって精度って言うのか?よく分からん。俺が馬鹿なだけか?
>>191
インナー関数は C++ でも書けない。
>>185
「コンパイルの精度」 なんて言われたら普通コンパイラの挙動が正確かどうか
という事を思い浮かべるぞ。
オレ語は使うな。
173 の文脈じゃあ 185 の内容は普通考えつかない。
>>191
つーか括弧の対応が取れてない。
>>183
うーん、ほんとにCではだめで独自拡張にあたるんだろうか。

関数宣言も変数宣言も宣言の一種であって、ブロックの先頭ではそのブロック内
スコープとなる宣言ができるから、Cでも問題ないような気がするんだけど、
私が規格を読みきれていない可能性もあるので、今一つ自信がない。
>>183では断言してるから、 きっと根拠があるんだろうけど…。
>>191
括弧の対応が取れていないが、一番最後の括弧が余計だとすると、これは
ANSI以前の古いプロトタイプ宣言なのでは?
>>193
オレはなんとなくはわかった。
というか、共通ヘッダファイルの役割から、
推測しちゃったのかもしれんけど。

少なくとも >>172 に対して使う言葉じゃねーな。
200172:02/11/08 20:01
もしかして、僕が使ってる本ってダメダメ?w
k&rでもやってるからなあ。
202197:02/11/08 20:05
C++では宣言と文の混在が許されてるけど、Cでは { 宣言… 文… } の
順しか許されてないから、例えば

int main() {
printf("start\n");
int hoge(int x);
printf("%d\n", hoge(3));
return 0;
}

こんなのがC++では通ってCではダメ、というのは分かるんですよ。
でも>>175のケースなら、Cでも文法的な問題はないと思うんだけど…。
>>177に答えてくれーーー
204デフォルトの名無しさん:02/11/08 20:06
前橋本もってないんであれだが、
mallocのエラーチェックをする関数を作って使えとか、そんなんじゃない?
>>204

Cの場合結局エラーチェックをする関数からのエラーも見なきゃならんわけで……
(いきなりassertとかじゃないね?)
どっちかって言うとcallocの簡易版みたいな奴とかmallocとreallocを統合した版かなぁ
とか思いました。違うかな?
エラーだしてexitして終わる。
つか、どういうのを「皮をかぶせて」と呼ぶのかを知りたいんじゃない?
malloc()を元にして、例えば
void *d_malloc(size_t size)
{
void *p;
if ((p = malloc(size)) == NULL) { printf("もうダメぽ\n"); exit(1); }
return p;
}
こんなのを作ったりすること、でいいのかな?
ここで、d_malloc()はmalloc()のラッパー関数だとか言うよね?
>197
cl -W4をつけると、
>warning C4210: 非標準の拡張機能が使用されています : 関数にはファイル スコー
>プが与えられています。
ってちゃんと指摘してくれる。
void *d_malloc(size_t size)
{
#include <stdio.h>
#include <stdlib.h>
void *p= malloc(size);
if (!p) { fputs("皮かぶせますた\n", stderr); exit(1); }
return p;
}
>>208
それは標準なのか?
211197:02/11/08 20:32
>>208
なるほど。実際に警告がでるんですな。
gccだと-Wall -pedanticでも何も出ないけど、まあgccも絶対ってわけじゃないしな。
サンクス。
>>209
関数の中で#include使ったらマズーではない?
>>209
ネタだろ。
214183:02/11/08 20:43
漏れが必死に関数ないプロトタイプの可否を C99 規格書で検索中。
でももしかしたら可かも知れない。
ANSI 規格書持ってる人居ない?

ちなみに 209 は可。
プリプロセッサはテキストマクロだから C/++ の 文意に関わらずどこに出現
してもいい。
1.足し算関数を作成しなさい

int hoge( short* a, short b )
引数
short* a 加算先
short b 加算数
戻値0 正常
1 加算でオーバーフロー

…という問題が出されたんですけど、わかりません。

216177:02/11/08 20:49
>>207
そうです!ありがとう!
217215:02/11/08 20:50
#include<stdio.h>
#include<stdlib.h>
short *wk;
int hoge( short *a, short b );
int hoge( short *a, short b )
{
int c=0;
printf("%d",wk);
if(abs((long)a+ (long)b)>0x7fffL)return(1);
elsereturn(0);
}
void main(void)
{
short b;
while(!(hoge(wk,b)))
{
rewind(stdin);
printf("input num... >");
scanf("%d",&b);
printf("%d\n",hoge(wk,b));
}
}
なんとかここまでできたんですけど、どなたか助けていただけませんか?
ていうか、できる・できないは別としてなるべく分かりやすく書くスタンスは
堅持してくださいお願いします。
>>214
いや、#include自体はソースのどこにあっても問題はないんだけど、
そのヘッダファイルの中身が問題で。
もしヘッダでinline関数の定義とかがあったらアウトですよ。
(Linuxなんかじゃ実際多用してるし)
>>215 >>217
1 を見てから書いたか?
221214:02/11/08 20:54
>>219
ああどうも、そういう意味ね。了解。 
222215:02/11/08 21:00
>>220
すんませんでした。逝ってきます。
223197:02/11/08 21:06
>>214
ANSIじゃなくてJIS X3010の文面だけど、見つけたよ!
やっぱり規格の読みが足りなかったか。

6.5.1 記憶域クラス指定子 で、
「関数を表す識別子がブロック有効範囲をもって宣言される場合、extern以外の
明示的な記憶域クラス指定子をもってはならない。」
という文があった。ということで、>>175は文法違反だったのか。

関数内でexternでプロトタイプ宣言をやることはあるから、文法的にいけると
思ってたんだけど、こんなところに例外があったとはね。勉強になった。
224197:02/11/08 21:12
ん、まてよ。
『明示的な』記憶域クラス指定子をもってはならない、ということは、
たとえば関数の中でstatic関数のプロトタイプ宣言をやるのはだめだが、
>>175は記憶域クラスは指定されてないから、可ということにならないか?
こうなるとANSIの原文を参照したくなるが…(持ってないけど)。
やべー大発見!
a=a/2と
a/=2って同じだよね!?
>>225
字面が違います。
やってることは同じです。
ちなみに
a>>=1
も(ある条件を満たせば)同じ意味になりますが、こういう書き方はやめましょう。
void foo( int *a, int *b ) {
int tmp=*a;*a=*a/*b;*b=tmp;
}
Cを始めて間もないのですが、コンパイラのLSI-C試食版てのを
使ってあるソースコードをコンパイルしようとしたら

「ファイル windows.h がオープンできない (No such file or directory)」

と出てコンパイルできないのですがどうすればよいですか?
>>228
日本語の勉強をしてください
>>226
字面は違う?あたりまえじゃん
やってることは同じだべ?
じゃあさ、a=a/2ってとこをa/=2って変えたら
バグ起きる場合ってある?
>>230
つうか、ふつうに C の文法なんだが...
知らなかったのか?
232225:02/11/08 21:24
>>231
いいから答えてくれ!
230に!
>>230

コンパイラにも拠るが、出力されるアセンブラコードが違うことはあるよ。
どっちも結果的な動作は同じなのでバグは発生しないはずだが。
基本的に a /= 2 と書いたほうが速いまたは変わらないはず、
なのだが俺は分かりやすいほうがいいと思うので a = a / 2 派。
c=a=a/2;

c=a/=2;
にはできなったとおもいます。
>>なのだが俺は分かりやすいほうがいいと思うので a = a / 2 派。
プ(w
>>234
日本語喋れやザルが
7゚{vv
238225:02/11/08 21:30
>>233
だよね!やべーよ!このソース!
#include <stdio.h>

int main(void)
{
  unsigned long a,k,k_max=0,y,y_max=0;
  unsigned long data[99];
  for(y=1;y<=100;y++){
    a=y;
    k=0;
    while(a>1){
      if(a%2==0){
        a=a/2;
        k++;
      }
      else{
        a=a*3+1;
        k++;
      }
    }
    data[y-1]=k;
  }
  
239225:02/11/08 21:31
  for(y=101;y<1000000;y++){
    a=y;
    k=0;
    while(a>1){
      if(a<=100){
        k+=data[a-1];
        break;
      }
      if(a%2==0)
      {
        a=a/2;
        k++;
}
else
{
a=a*3+1;
k++;
}
}

if(k>k_max)
{
k_max=k;
y_max=y;
}
}

printf("対象値が%dのとき計算回数の最大値は%dです。\n",y_max,k_max);

return(0);
}
240225:02/11/08 21:32
ある正数yが1になるまで、『奇数なら3倍し、1をたす』、『偶数なら、半分にする』
繰り返した回数をkとして1〜1000000までのkの最大値とそのときのyをだすプログラムで
『1〜100までの結果を配列に蓄え、以降の計算に利用する』ってやつ

a=a/2をa/=2に変えると、おかしな結果になる!
なんで!!!すごくない!?
>なのだが俺は分かりやすいほうがいいと思うので a = a / 2 派。

こいつは ++i と書かずに i = i + 1 とか書いてるのか?
>>240
ならないが
243225:02/11/08 21:34
( ̄□ ̄;)!!
オレはなるぞおおお
なんでだああああ
>>243
ほんとに a = a / 2 を a /= 2 に変えただけ?
a = a * 3 + 1 を a *= 3 + 1 にしちゃったりしてないよね?
245デフォルトの名無しさん:02/11/08 21:38
#define a (*foo())
int *foo() { static int bar, *p=&bar; return p++; }
i = i + 1 と対比されるのは i += 1 であって、++i ではないような・・・・・・。
>>245
(゚Д゚)ハァ?
248225:02/11/08 21:49
>>244
マジでそれだけ変えた!まじまじ!
XPでBCCで、CPad使ってるYO!
>>248
全く変わりませんが
しょーもないネタだったな
次はもっと面白いのにしてね>>248
まずは、具体的な結果の比較を出すのが先であろう。
gcc on x86 だと最適化の有無によって結果が変わるね
253デフォルトの名無しさん:02/11/08 22:31
char str[] = "ahoahoahoahoaho";この中から、すべての a を削除するルーチンを教えてください。ちなみに、2時間前にC言語の勉強はじめたとこです。
>>253
char *foo (void) {
static char s[] = "hohohohoho";
return s;
}
>>253
とりあえず、入門書を一冊読んで、理解してから質問してください。
256253:02/11/08 22:36
そんなひどい……
257デフォルトの名無しさん:02/11/08 22:37
void foo(char *s, char a) {
while (s = strchr(s, a))
memmove(s, s+1, strlen(s));
}
char *delete_a ( char *str ) {
char *s = str, *d = str, *l;
while ( (l = strchr(s, 'a')) != NULL ) {
*l = '\0';
while ( *s ) *d++ = *s++;
s++;
}
return d;
}
259225:02/11/08 22:41
じゃあ結果だ!
これがa=a/2のとき
対象値が837799のとき計算回数の最大値は524です。
-- Press any key to exit (Input "c" to continue) --

これがa/=2の時
対象値が992425のとき計算回数の最大値は992600です。
-- Press any key to exit (Input "c" to continue) --

ちなみにマジレスだから!みんな変わんないって事はオレだけ!?
だれか変わった人いねーーがーー
260デフォルトの名無しさん:02/11/08 22:41
void foo(char *s, char a) {
char *t = s;
while (*s) {
while (*t == a) t++;
*s++ = *t++;
}
}
261デフォルトの名無しさん:02/11/08 22:43
同じだった。
#include <stdio.h>
int main(void){
unsigned long a, k, k_max=0, y, y_max=0, data[100];
for (y=1; y<=100; y++)
for (a = y, data[y] = 0; a > 1; data[y]++)
if (a % 2 == 0) a /= 2;
else a = a * 3 + 1;
for (y = 101; y < 1000000; y++) {
for (a = y, k = 0; a > 100; k++)
if (a % 2 == 0) a /= 2;
else a = a * 3 + 1;
k += data[a];
if (k > k_max) { k_max = k; y_max = y;}
}
printf("対象値が%dのとき計算回数の最大値は%dです。\n",y_max,k_max);
return 0;
}
>>259
>>252

>>260
えらー
263デフォルトの名無しさん:02/11/08 22:48
void foo(char *s, char a) {
char *t = s;
do {
while (*t == a) t++;
} while (*s++ = *t++);
}
264253:02/11/08 22:49
ありがとうございます。なんとかできそうです。
265デフォルトの名無しさん:02/11/08 22:50
VRMLの質問はどのスレに行けばいいですか?
もしや板違い?
266匿名希望 :02/11/08 22:56
#include<stdio.h>
int scan_uint(void){ 
int tmp;
do{
printf("非負の整数を入力して下さい:"); scanf("%d",&tmp);
}while(tmp<0);
return (tmp);
}
int rev_int(int){
int tmp=0;
if(num>0){
do{
tmp=tmp*10+num%10;
num/=10;
}while(num>0);
}
return (tmp);
}
int main(void) {
int nx=scan_unit();
printf("反転した値は%dです\n",rev_int(nx);
return (0);
}

 上記のプログラムは「読み込んだ非負の整数値を逆順に表示」するプログラムなのですが、13行目の式の意味が分かりません。どうか御教授ください。


267デフォルトの名無しさん:02/11/08 22:58
tmp=tmp*10+num%10;
tmp*10 + numの一桁目。
tmp=123, num=456だったら
tmpは1236になる。
268デフォルトの名無しさん:02/11/08 23:04
>259
Compilerはなんですか.Overflowとかが起こってんのかなあ.
270デフォルトの名無しさん:02/11/08 23:07
>269
なるほど.
271266:02/11/08 23:07
>>267さん
ありがとうございました。
272那由多 ◆F4E74ZBQPA :02/11/08 23:14
>266

123→321とするプログラムですよね。

(1)tmp=0,num=123
tmp=0*10+123%10=3

<num/10=12>

(2)tmp=3,num=12
tmp=3*10+12%10=32

<num/10=1>

(3)tmp=32,num=1
tmp=32*10+1%10=321

ってことでいいのかな。
273デフォルトの名無しさん:02/11/08 23:25
>238
よく見たら,data配列のsizeの宣言がおかしいような.data[99]の値はちゃんと保存されてるのか?
>238
アハハハ、やっちゃったね。
275デフォルトの名無しさん:02/11/08 23:31
>>273
いくら払えばいいんですか?
どばーっと。
一匹でいいや
278225:02/11/08 23:47
>>273
どういう事?
sizeの宣言ってdata[99]の99のこと?
でも1から100までだから、配列のサイズは99でしょ?

てか実際変えてるのはa=a/2のとこだけだから、
そこは関係ないと思う。
最もプログラムの本質に関わることだったらあれだけど・・・
>>278
何を言っているのか要領を得ないが、data[99] と宣言したら、使えるのは
data[0] 〜 data[98] だぞ。
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
サイズは10。
281デフォルトの名無しさん:02/11/08 23:58
>>279
何言っているのか要領を得ないが、わかるようにはっきり言ったらどうだ?
>>281
十分はっきりしてるじゃねーか
283172:02/11/09 00:02
記憶クラス(staticとかexternとか)について誰かわかりやすく教えてくれませんか?
手元の本を読んでもチンプン・カンプンなんで…

ページでもいいからお願いします。(あつかましくてすみません)

勉強し始めて一週間とちょいぐらいのレベルです。
>>281
何言っているのか要領を得ないが、何がわからないのかはっきり言ったらどうだ?
>>283
まず、static の何がわからないか、extern の何がわからないか書いてくれ。
>>225
つまらん
ログ流すな
287デフォルトの名無しさん:02/11/09 00:05
このスレ、なんで週末になるとレベルが低くなるの?

int *p = data-1;
288デフォルトの名無しさん:02/11/09 00:05
>>284
十分はっきりしてるじゃねーか
290デフォルトの名無しさん:02/11/09 00:09
>>287
十分はっきりしてるじゃねーか
291172:02/11/09 00:11
>>285
何がわからないのか…う〜ん

いままで(といっても一週間程度だけど) static とか使わないでソース書いてきたんで、
どうしてそんなものを宣言する必要があるのか? とか
だったら最初から外部関数でいいんじゃないの? とか
考えちゃうわけでして…

こんなんじゃだめですか?(抽象的でごめんなさいマジで…)
よくいるよ。強い口調で言ってみたものの自分が間違っていることに気づいたが
後に引けない>>279みたいなやつ。
293172:02/11/09 00:12
>>291
外部関数 → 外部変数

です、間違えた
>>292
>>279のどこが間違ってるの?
>>294
コピペだから気にするな
>>294
お願いだから相手にしないでよ。
>>291
じゃ、何も知らないという前提でいいな。

まず extern だけど、これは関数や変数の実体を定義していないが、直ちに
使いたいという場合に用いる。
例えば、プログラムの規模が大きくなってくると整理の為にソースを分割して
コンパイルするけど、その際に file_a.c で実装されている関数 func1() を
file_b.c から呼び出したい時に 「extern int func1(int value);」 とか書く。
ただし変数でなく関数の場合、extern は通常つける必要が無く、単に
「int func1(int value);」 と書くだけでよい。
つまり、ファイルを複数に分割するつもりがないなら、覚える必要は無い。

static だけど、これはグローバル (関数外) で書くのとローカル (関数内) で
書くのとでは意味が違う。

グローバル (関数外) で書く static は、他のファイルのソースから extern
できないようにする。
static に指定するとそれは外側から見えなくなるので、file_a.c と file_b.c
で共に同名の変数や関数が定義されてても、ぶつかる事がない。

ローカル (関数内) で書く static は、これは変数にしか付けられないわけだが、
普通に宣言した変数と違って前回に呼び出された時の値をそのまま保存するよう
になる。
これは、例えば前回に関数が呼ばれた時間を覚えておいて、そこからの経過時間
を返したい場合などに使える。

・・・難しいかな?
298デフォルトの名無しさん:02/11/09 00:28
>>293
static → 外部モジュールで参照不可
extern → 外部モジュールで参照可
>>293
static 変数とグローバル変数の大きな違いは、static 変数は関数の外側から
見えない事。
だから、別の場所で間違って値を変更してしまう危険を防ぐ事ができる。
さらに、その変数が他の関数では直接使われない事がすぐわかり、ソースを
読むのが簡単になる。

グローバル変数だらけのソースは一般に嫌われる。
(何がどこで使われてるかわかったものじゃないから)
300
Σ(゚д゚lll)ガーン
>>298
> extern → 外部モジュールで参照可

それは微妙に違くないか?
extern → 外部モジュールのを参照可に?
304172:02/11/09 00:41
>>297-299
ありがとうございます!

extern は大体(思い込みかもしれないけど)わかりました。
要するにソースの規模が大きくなるならextern にしとけってことで(いいのかな?)

static はかなり疑問符をつけながら読んでますw
大まかな認識として値を保持し続けるってことでいいのかな?

ほんとありがとうございます。勉強しはじめなんで一気に飲み込むのは僕には無理があるようで、これから徐々に消化していきたいと思います。
でも、おかげさまでアバウトな面での認識はできました。
>>304
extern についてはちょっと違う。
extern は、関数を使いたいファイル側で使うの。

[file_a.c]
#include <stdio.h>
extern int square(int i);

int main(void)
{
 printf("%d\n", square(2));
 return 0;
}

[file_b.c]
int square(int i)
{
 return i * i;
}

こんな感じ。
>>303
それが妥当な説明だね。簡単に言うなら。
>>273
1から100までなのに配列のサイズが99っておかしくねぇ?
おまえの理論は、1〜N個のデータはN-1個の配列に格納できるっつーことだぞ。
つまり、N=2とすると、1個の配列に格納できるって話になっちまうぞ。
もう一度よく考えれ。
>>304
 staticは関数の宣言に使用した場合と変数の宣言に使用した場合で
意味が異なる。
 static func() と使った場合はそのファイル内ローカルの関数になる。
 また関数内で static int a;と変数を宣言した場合はauto変数でなく
 静的に(スタック上でなくメモリ上に)確保される。
 つまり関数外でstaticなしで宣言したことと同じになる。

 extern func();と
 func():は同じことだ。

 どうだい、これでますますよくわかっただろう(w
>つまり関数外でstaticなしで宣言したことと同じになる。
リンケージは?
>>308
罠張るなよ。
グローバルの static 変数はどうなるんだ。
あと大抵の入門者は auto なんてキーワード知らんから持ち出すな。
>>307
何故それを 273 に向かって言う?
つーか、多分 「1 〜 100」 はループカウンタを言っていると思われ。
実際には N - 1 でアクセスしてる。

・・・それでも後ろに 1 つはみ出るけどナー。
312172:02/11/09 01:04
(^^;
もちっと勉強してから、でなおしてきますぜぃ!

あ、でも使用用途が判らなかったから悩んでたんでそこらへんは解決しました!
あとは勉強して自然と身につけるのみですよね
>>312
どうでもいいが、新たに質問したら、名前はそこの番号に変えた方がいいぞ。
>>309
 それは書いた後で気がついた
知識ひけらかしたいのかもしらんが、無駄にレスが多くなるような回答はやめようべ。
ただでさえ流れるの早いんだから。
>>315
309 や 310 や 311 みたいな突っ込みもいかんのか?
317225:02/11/09 01:49
1から100までって99個でないのか?
>>317
1から10まで9個か?
>>317
だから配列のインデックスは98が最高なんだから99にアクセスしたらまずいだろって。
もうこの話引っ張るのやめてくれよ。
320225:02/11/09 02:08
死んできます。
探さないでください。
321デフォルトの名無しさん:02/11/09 02:32
CでRS232Cに入出力するためにはどうしたらいいですか?
開発環境:Windows
コンパイラ:VC++かCygwin
from >>1
C 標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
323デフォルトの名無しさん:02/11/09 02:46
>>322
開発環境依存ですか。ありがとうございます。
キーボードから入力とかディスプレイに出力ってのも環境依存だな。
大抵は標準入出力を使ってやりとりすれば出来ると思うけど。
週末にこの寂れ様・・・
>> 325
厨がわいてた方がいいと言うのか?
しかしこのスレ回転速いな・・・。
>>327

         ス        ス
            レ
                  レ
ス  レ ..┌→─→─→─→─→─┐     ス
      │               ↓  レ
      ↑               │
      │               ↓
      ↑               │
   レ  .└─←─[. 0.001 秒 ]─←┘   レ  ス
ス         レ      レ
                    ス
          ス

という事でよろしいか?
1kHz じゃ、まだまだだな。
330328:02/11/09 08:40
   ||
 ∧||∧
(  ⌒ ヽ トゥトゥトゥマシェーリー
 ∪ 。ノ    トゥトゥトゥマシェーリー
  ∪∪

     ||
   ∧||∧
  (  ⌒ ヽ>>328
   ∪  ノ
   ∩∪∩
   (・∀・| | クヨクヨスンナ
    |     |
  ⊂⊂____ノ
       彡
________
首絞めてる首絞めてる
>>329
おまいは回転速度をHzで数えるのか。
普通rpmだろう。
周波数≠回転速度
328 は 60,000 rpm か?
並みの HDD よりは速そうだな
gMyLovelyHoge
mMyLovelyHoge
などの変数名で、g や m についてだけd、g はglobalでわかるけど、mはなに?
strncpyとmemcpyってどうちがうの?
規格見たらほとんどいっしょだよ。
でもmemcpyは仮引数が*void型だけど。
結局何が違うの?
strはstringだよね?
memってもしかしてmemory?
てことはmalloc系?
よくわからん・・・
質問責めでごめん
おい!void main(void)はなにがいけないんだ。
俺は昔っからこう書いてるんだが
最近はみんな返り値intにしてるらしいじゃねか。
>>338
別にいけなくはないだろ
コンパイラのワー人グがうざけりゃintかえしとけ
>>338
だってint型を返すんだもん。
ちゃんとreturn EXIT_SUCCESとかすれば?
混乱してきました。
charへのポインタ型のstrがあって、
*str++ってしたら、str[i+1]って事だから、
次の文字を指しますよね?
str++ってのは、どういうことなんですか?
342デフォルトの名無しさん:02/11/09 12:21
>>341
ちがうよ。
*str;
str++;
の2つを一文で書いてるだけ。
343デフォルトの名無しさん:02/11/09 12:23
>>337
途中に'\0'があるときの動作が違う。
>>341
後置された++は参照されたあとに変数の値を増加させる演算子
str++ならstrが参照されたあとにstrが増加する
つか、これくらい本買って嫁
345デフォルトの名無しさん:02/11/09 13:31
memcpyはこう使える。
#include <stdio.h>
int s[5], t[]={1, 2, 3, 4, 5};
int main() {
int i;
memcpy(s, t, 5*sizeof(int));
for (i=0; i < 5; i++)
printf("%d\n", s[i]);
}
>>344
だから、strが増加するってどういうこと?
347デフォルトの名無しさん:02/11/09 14:39
str++はstrが次の要素を指すようにする。
*str++ってさす先のものを1増やすんだ?
でstr++が次の要素をさすんだ?
>>348
違うよ。
*str++ は *(str++) と同じ。 (*str)++ ではない。
そうだった!
*より増分演算子の方が優先度たかいんだったね。
三区す
#include <stdio.h>

int main(void)
{
int vc[]={0,1,2,3,4};
int vd[]={0,1,2,3,4};

printf("vc=%d\nvd=%d\n",*vc,*vd);
*vc++;
printf("vc=%d\nvd=%d\n",*vc,*vd);
return(0);
}
で、このソースなぜダメ?
352デフォルトの名無しさん:02/11/09 15:03
*vc++; 配列名は演算不可
*vc++;
アドレスを変えられるのはポインタだけ
そうなのか・・・。
オレの認識だと、配列はポインタにすぐ読み替えられるって書いてあったから、
こんなのもありだと思ってたんだけど
355デフォルトの名無しさん:02/11/09 15:05
*(vc + 1); なら可
>>348
具体例を挙げて説明すると

char s[] = "ABC";
char *str;
int ch;

str = s; /* strが 'A'の位置を指す */
ch = *str++; /* chに 'A'が入り、strは次へ進んで 'B'の位置を指す */
#include <stdio.h>

int main(void)
{
int vc[]={0,1,2,3,4};
int vd[]={0,1,2,3,4};
int *v=vc;
printf("vc=%d\nvd=%d\n",*v,*vd);
*v++;
printf("vc=%d\nvd=%d\n",*v,*vd);
return(0);
}

これにしたら警告が出るんだけども・・・

警告 W8019 test7.c 9: コードは効果を持たない(関数 main )
>>354c faq 6.2
>>357
*v++->v++;
360デフォルトの名無しさん:02/11/09 15:10
(*v)++; では?
>>358
サンクス!宣言の時は違うってことかな・・・
362デフォルトの名無しさん:02/11/09 15:10
>>357
*v の値は参照する必要ないでしょ。
アドレスを加算させるだけだから、v++; でおk
>>362
6.3も読め。
>>359
ほんとだ・・

ちょっと待ってよ。
*v++は*(v++)と等価だから、「vをインクリメントした先にあるもの」だよね?
v++は「vをインクリメント」で、vってのはつまり配列?
あーわかんねー。*v++はなんでだめなの?
v++;アドレス演算という言葉を出せば良い
vはアドレスか!そうだね。v=&vc[0]で宣言してるってこと?
vをインクリメントすると、アドレスが増える。
たしかT型へのポインタだとして、T型のサイズ分だけ増えるんだよね?
>>365
アドレス演算ってポインタ演算のこと?
>>364

>>356は読んだか?
369デフォルトの名無しさん:02/11/09 15:19
こんな昼間から飛んでしもたやんけ
vはintのポインタ型の変数。
v++はvと言う値をインクリメントすると言う事。
*(v++)は*v++と同じ。
*v++は評価結果として*vを返し、v++を行う。
この文脈では*vを返す必要は無いのでv++でok.
>>368
読んだよ!でもいまいち分かってないかな?
配列とポインタが別物ってのは分かった。3つの場合を除いてね。
>>371
返すってことは例えばchar buf[256]があって
bufにvcの文字列をコピルときとかbuf[i]=*vc++;
ってやんのはおk?
>>373
まず、日本語がだm
要するに、*vc++でも問題はないんだ?
でもこの場合は別に*vを返す必要なんてないから
vc++にしろってコンパイラが言ってるってこと?
>>375
そう解釈していい。
>>373
ok.
俺は分かり易さを考えるとあんまり使わないが。
そんな文が必要になる時は大概for文中でインクリメントする。
みんなありがとう!ちょっと分かった気がするYO!
379デフォルトの名無しさん:02/11/09 17:59
>>377
なにを偉そうに
380デフォルトの名無しさん:02/11/09 18:10
>>350
*と++(後置)は優先順位は同じはず。
ただ右から結合するから++が先に実行される。
math.hのexpの実装ってどこを見ればわかりますか?
だから環境書けって。
すいません。solaris7のgcc 2.95.1です。
>>380
それはK&Rでない?
規格だと*と++(後置)は++の方が優先順位は高い。
ただし++(前置)は*と優先順位が等しい
glibはアセンブラだな<expe^x = 2^(x * log2(e))なんて変換して計算してる。
>>380 >>384
優先順位が同じだろうが、後置の方が高かろうが、
単項演算子の結合規則は右から左なので同じ結果になる。
つーか必要ないなら式の中で副作用を伴うものを使うなよ。
buf[i]=*vc++; みたいに。
388デフォルトの名無しさん:02/11/09 18:57
初心者ですが、質問です。
1.dat
2.dat


とデータファイルがあって、2番目のデータを読み込みたいとき
n=2; "n.dat"
とすると、エラーが出るのですが
一般的にはどんな方法がありますか?
>>388
具体的なエラーとかでもちゃんと書いてみたら(w
390デフォルトの名無しさん:02/11/09 19:04
>>384
ソースきぼん
391388:02/11/09 19:05
>>389
こたえる気がないくせに茶化さないでください。
あなたみたいなのがいるから2チャンネルはだめだといわれるんです。
ほかの方、よろしくお願いします。
392デフォルトの名無しさん:02/11/09 19:06
>>386
> 単項演算子の結合規則は右から左なので

ハァ?
393!389:02/11/09 19:09
まともに答える気が出なくなるような質問の仕方をする方がどうかと思うが。
394386:02/11/09 19:12
>>392
   ∧∧
   /⌒ヽ)   右から左は前置だけだね・・・。
  i三 ∪   すまん。逝ってくる
 ○三 |
  (/~∪
  三三
 三三
三三
>>388
一般的にはファイルをオープンして一行目のデータを読み飛ばして二行目を読んでファイルをクローズします。
コードはプログラミング言語を勉強して自分で努力して書いてください。
396383:02/11/09 19:16
>>385
なるほど。
そうなるとlogはどうなってるのかとか2^xはどうなってるのか、と気になってしまいます。
標準ライブラリのソースコードはないのでしょうか?
397デフォルトの名無しさん:02/11/09 19:17
++a; ←これが前置で、
a++; ←これが後置だよね?
sprintf(buf, "%d.dat", n);
fopen(buf, "r");
388は何がしたいのかよくわからんぞ。
391は釣り師のような気がするが。
>>396
2^xが2のx乗ということなら、powを呼んでいるだけだと思うけど。。。
>>388
こんな質問で、どこでどんなエラーが出るか分かるの思うのか?
で、多分sprintfすりゃあ解決ってことかと推理。
推理させるなヴォケ

あ、ネタか?
402知りたい人:02/11/09 19:20
文字のAを10進数の1、Bを2とCを3といった感じになおしたいのですが、
文字コードを使って上手くできませんかね。ちょっとした例文を求む。
>>396
ソースコード拾ってくれば?
おいらはいつも見れるように主要ソースコードは展開させて置いてる。
文字 - 'A' + 1
405デフォルトの名無しさん:02/11/09 19:23
LPARAMのポインタを引数に持つ関数に対してlongの変数を使用していました。
こんな感じ。
long abc;
func((LPARAM *)abc);

わざわざキャストする必要ありませんか?
将来性を考慮するとキャストする必要ありますか?
どっちがいい?
char c;
int i;
i = c-'A';

>>405
整数をポインタにキャストするのって0以外は怖いんですけど・・・
キャスト以前にどうしてlong変数を使用しているのか聞きたい。
409407:02/11/09 19:27
(LPARAM)&abcの間違い?
410409:02/11/09 19:27
じゃなくて、
(LPARAM *)&abc
LPARAM *abc;
func(abc);
void *abc;
413デフォルトの名無しさん:02/11/09 19:48
>>405
キャストして動いてるんならそれでいいんじゃないかと。
将来性(と移植性)を考えると、longを使用するのを止めた方がいい。
414405:02/11/09 20:23
>>410
すんません。その通りです。

>>408
元々のデータ構造がlongを使用しているんでしが、リストビューに割り振れる値がLPARAMでしょ。
だからこうなりますた。

>>413
データ構造的にはlongを使いたいんですよね。
リストビューに割り当てるのを考え直した方がいいんでしょうか?
データを格納したポインタを割り当てるとか。
でも、ポインタも4byteだし、あまり意味は無いかも知れない。

ソースを検索してみたら、short値をリストビューに割り当ててることもありました。
func((LPARAM *)&shortparam);
ま、問題なく動いてはいますが。

自分の考えとしては、元々のlong,short値の範囲内で関数に渡しているし、同じ
変数を使っている限りはデータ落ちはないかと。
今後sizeof(LPARAM) >= sizeof(long)の条件が崩れた場合恐いんですが。
415デフォルトの名無しさん:02/11/09 20:33
391は釣り師のようです。
例えば、「65.dat」という名前のデータファイルを読み込みたいときに
n=65, "n.dat"
と記述すると、"n.dat"という名前のファイルは見つかりません。って
エラーが出るのですが(当たり前?)
65.datを呼び出すにはどう記述すればよいのですか?
>415
あんた誰?
417デフォルトの名無しさん:02/11/09 20:37
>>405
ウインドウメッセージの都合上いたし方ないのでは。
>>415 当たり前です。
>>415
言語が違う予感
LPARAM abc;
func(&abc);
421デフォルトの名無しさん:02/11/09 20:47
>>419
C++です。
65.dat
70.dat
75.dat
と次々に読み込んでいくにはどう記述すればいいのでしょうか?
"n.dat"じゃ無理(当たり前)なのは分かりました。
>>415
n=65, "n.dat"って記述したらコンパイルエラーですが何か?
n=65;
sprintf(buf, "%d.dat", n);
fopen(buf, "r");
424デフォルトの名無しさん:02/11/09 20:51
>>423
知ったかぶり野郎は帰ってくれ!!!
>>424 釣り師かっこ悪い
>423
398のVerUp版だね(笑)
>>426
そうだけど何が面白いの?
428初心者&rlo;者心初:02/11/09 21:03
マイナス(符号付き)はメモリの中ではどのように
扱われているんですか?

あと、ビット演算する時は変換文字を%uにしないと正しく出力されないのは
なぜなんでしょうか?教えて下さい。
マイナス用のビットを持っていることもあるし
2の補数のこともある。
430デフォルトの名無しさん:02/11/09 21:05
>>428
"2の補数"で検索。
>>428
初心者はrlo禁止です
>>427
親切にnへの代入の仕方を教えている。
バカにしてるのだろうがな。
433同意&rlo;意同&lro;:02/11/09 21:13
>>431
同意。

rloつかうなら「日稿投」はやめてほ&rlo;いし&lro;ね。
#何気にテストw
>>433
テスト禁‏止禁‎(w
435426:02/11/09 21:22
>432
違うよ。
既に解決策が398に載ってたのに見逃している421をあざ笑ったつもり。
スマソ。
436414:02/11/09 21:25
>>417,all
仕方がないということで宜しいでしょうか?
437デフォルトの名無しさん:02/11/09 21:52
long abc;
LPARAM hoge=abc;
func(&hoge);
abc=hoge;
つーかリストビューと絡めるなら Windows Programing スレか Win32API スレに
逝ってくれ。
C じゃなくて C++ なら C++ スレに逝ってくれ。
あと C++ 使ってる香具師に fopen() を教えるな。
C++知らなくてな。スマン。
>>414
> 今後sizeof(LPARAM) >= sizeof(long)の条件が崩れた場合恐いんですが。

呼び出す関数がブラックボックスなら、逆( <= )だと思うが。

そうじゃなく、自前のコールバック関数を呼び出す時に一旦
LPARAM*を 経由しているだけなら、LPARAMとlongのサイズでなく、
LPARAM* と long* の違いの方が重要だと思う。
441414:02/11/09 22:59
>>440
>呼び出す関数がブラックボックスなら、逆( <= )だと思うが。
あれ。逆でつか?
関数側sizeof(引数)が大きければとりあえず問題ないとオモタのですが。。

>そうじゃなく、自前のコールバック関数を呼び出す時に一旦
>LPARAM*を 経由しているだけなら、LPARAMとlongのサイズでなく、
>LPARAM* と long* の違いの方が重要だと思う。
これでハッとしますた。
確かにアドレスが渡ってるだけだから、メモリリークの可能性がありますね。

でも、
short st;
long lg;
st=(short)lg;
リトルエンディアンの場合、このようなキャストをするとlgの下位2バイトが
stに入るという「C言語仕様」?でしたが、関数の引数をキャストした場合は
仕様的にはどうなんでしょ?
先に書いた通り、メモリリークの可能性があるならば>>437の例でも問題あり
ますよねえ?
abc=(long)hoge;これくらいは要りそうだが。
LPARAM abc;って宣言に変えた方がいいんでは?
皆さん、ひとつ質問をさせてください。

C FAQによると「配列は簡単にポインタに成り下がる」のとおり、
関数の引数としてcharの配列を渡すとポインタとなってしまい、
sizeofなどで長さが取れなくなってしまいますよね?

で、自分が使用している環境ですと、構造体にcharの配列を持たせて、
この構造体ごと関数の引数として渡すと、関数の中でも問題なく配列として扱えるのですが、
これってどこでも使える汎用的な手段なのでしょうか?
445440:02/11/09 23:21
>>441
> 関数側sizeof(引数)が大きければとりあえず問題ないとオモタのですが。。

たとえば仮に sizeof(long)==4, sizeof(LPARAM)==8 だったとすると、
こちらが渡した4バイトのデータを、
関数側は8バイトあると見なして読み書きするわけだけど。

それと、上では忘れてたけど、関数が要求してるのが配列の場合は
(ポインタでなく)値自体のサイズも重要になるね。

> 確かにアドレスが渡ってるだけだから、メモリリークの可能性がありますね。
なんでメモリリークなんかが出てくるの?
俺が言ってるのは、例えばポインタのサイズが
sizeof(long*) > sizeof(LPARAM*) の時にまずいという話。
といっても将来そうなることは無い気がするけど。

> stに入るという「C言語仕様」?でしたが、
C言語の仕様ではなく、CPU依存の話だね。

俺も皆の意見と同じく、気になるなら値を一旦LPARAM型変数に
キャストした方が安全な気がする。
446440:02/11/09 23:31
445で書いた
> 俺も皆の意見と同じく、気になるなら値を一旦LPARAM型変数に
> キャストした方が安全な気がする。
これは、コールバック関数用でなく、
ブラックボックスの関数に単なるパラメータとして渡す場合ね。
>>444
それで問題無いなら問題無いです。
ただし、配列が丸ごと値渡しされるので、サイズによってはとんでもなく遅くなります。
あと、ポインタではなく値で int とかを渡した時と同様、呼び出し元の値の変更は
できません。
>>444「どこでも使える」かどうかと言えば「使える」と言う。「どこでも使われている」かどうかと言えばちょと疑問。
>>444
規格(ANSI)では使えることが保証されてる。

sizeofで長さを計りたいからと言う理由なら、
構造体ポインタを渡すだけでもいいのでは。

でもサイズを計るためにわざわざ構造体を使うくらいなら、
配列とサイズの2つのパラメータを渡した方がいい気がする。
>>444
構造体のポインタを渡すというのが一般的。
固定長の配列なら長さを渡す必要もないわけだが
452デフォルトの名無しさん:02/11/10 00:21
TRUE=非ゼロ という定義に関しての質問なのですが
hoge()という関数がBOOL値を返す場合
if ( hoge() == TRUE )
よりも
if ( hoge() )
と書いたほうが良いのでしょうか?
もしTRUE が 1 と定義されていて、BOOL値がTRUEとして1以外を
返すと実行されないと思ったので。
453444:02/11/10 00:22
皆さん、レスありがとうございます。
なるほど、構造体ごと渡すと重たいので構造体のポインタで渡すか、
または配列とサイズを両方パラメータとして渡す、のですか。

とりあえず今までいろいろ勉強のため書いたプログラムを、
ポインタで渡すよう修正してみます。
ありがとうございました。
BOOL値ってナニ?
455452:02/11/10 00:24
Boolean(真偽値)のことです。
BOOLはVC独自の定義でした。端折ってすいません。
>>452
普通の発想(Javaのbooleanみたいにtrueとfalseの値しか取らない)
ならif (hoge())が当然だが(でないと
if ((...(hoge() == TRUE) == TRUE) == TRUE)...) と書くはめになる)
WinのAPIは戻り値がBOOLなのに1と0と-1を返したりするからなあ…
>>452
そう。だから、C++/C99でboolが組み込み型に導入された。
458452:02/11/10 00:42
>>456
ます、なぜこんな質問したかというと、コードに
if (hoge() == TRUE)
と書けばhogeがBOOL値を返す関数だとひと目でわかるのですが
if (hoge())
だと、hogeは有効なハンドルを返すのか、何かの計算結果を返すのか
もしくは真偽値をかえすのか、パッと見てわからないですよね。
なので、できれば ”==”を使った表現をしたかったのですが
TRUEの値が一定でないと危ないコードになるかなぁと。

>if ((...(hoge() == TRUE) == TRUE) == TRUE)...) と書くはめになる)
if ( (hoge() == TRUE) == true )
とは違う意味なのですか?(TRUEが自分で定義したものでtrueが言語定義)
>>457
待った、デマは流すな。
C99 で定義されたのは、<stdbool.h> の _Bool だ。
C には結局 bool は無い。
460414:02/11/10 00:43
>>445
>> 関数側sizeof(引数)が大きければとりあえず問題ないとオモタのですが。。
>
>たとえば仮に sizeof(long)==4, sizeof(LPARAM)==8 だったとすると、
>こちらが渡した4バイトのデータを、
>関数側は8バイトあると見なして読み書きするわけだけど。
>
>それと、上では忘れてたけど、関数が要求してるのが配列の場合は
>(ポインタでなく)値自体のサイズも重要になるね。
>
>> 確かにアドレスが渡ってるだけだから、メモリリークの可能性がありますね。
>なんでメモリリークなんかが出てくるの?
値自体のサイズが異なるんで・・・ちと実験例。
void func(WORD * wd)
{
*wd = 0xffff;
}
void main()
{
BYTE buf1,buf2;
buf1 = buf2 = 0;
func((WORD *)&buf2);
}
(続く)
>>456
なんか矛盾してない?
> WinのAPIは戻り値がBOOLなのに1と0と-1を返したりするからなあ

だから
if (hoge()) とか
if(hoge()!=FALSE)
と書くべきなのだが。
462414:02/11/10 00:44
(続き)
この場合、buf2に書き込みが行われる際にbuf1まで影響されないかと思ったんです。
(もしくはその逆のbuf1に書き込もうとしたらbuf2にも影響が・・・)
実験結果からいうと&buf1=0x0012f778,&buf2=0x0012f774とその差4byteだったので、
相互に影響は出ませんでちた。
なんで4byteの差があるのかわからないけど、これなら引数がDWORD *でも問題ない
みたい・・・てか、実験して確認したらやはり問題なかった。
buf1とbuf2のアドレスが1バイト間隔だと思ってたんです。
私の考えていたメモリリークの可能性ってのは分かって戴けたかしら?
ていうか、メモリリークの危険は無いと思って良いのかな?たまたまかな?
4byte以上の変数型ってあったっけ?

>俺が言ってるのは、例えばポインタのサイズが
>sizeof(long*) > sizeof(LPARAM*) の時にまずいという話。
>といっても将来そうなることは無い気がするけど。
これは私も無いと思いますね。

>俺も皆の意見と同じく、気になるなら値を一旦LPARAM型変数に
>キャストした方が安全な気がする。
確かに皆様の言われることはよく分かりましたが、
・・というか、上記実験結果の信用性次第なんでしょか?
463デフォルトの名無しさん:02/11/10 00:44
これだ!
if (hoge() != FALSE)
464459:02/11/10 00:45
ごめん、今確認したら、

#define bool _Bool

だって。
マクロだけどあることはあるみたいだ。
465452:02/11/10 00:45
>>457
456氏が書いているように
>WinのAPIは戻り値がBOOLなのに1と0と-1を返したりするからなあ…
WinAPIのような関数を使わないといけない状態だと
一貫したコードがかけないんですよね。

# GetMessageなんてのが、まさにそうですよね。
>>463
そりゃまずいって(w
-1が返ったときはエラーなのにTRUEだと思っちゃう。
>>459
スマソ。C99ではboolはマクロだった・・・
468461:02/11/10 00:49
ごめん。465を見て意味がわかった。
469デフォルトの名無しさん:02/11/10 00:49
#include <stdio.h>
void func(long * wd)
{
*wd = 0xffffffff;
}
void main()
{
int i;
char buf[]={0,0,0,0};
func((long *)&buf[1]);
for (i=0; i<4; i++)
printf("%d\n", buf[i]);
}
>>462
いったい何をやりたいんだか…
どうせ環境に思いっきり依存したことをやってるんだから、
自分の環境で動くなら良いのでは?

ちなみに、最近のCPUでは、1バイトの変数でも4バイト境界や
8バイト境界に整列させて割り付けるのはあたりまえだし、
doubleやlong longなど、一般的な環境で4バイトを超えるサイズの
データ型は色々ある。(構造体とか配列とかも…)
471414:02/11/10 00:51
>>469
さっきは書かなかったけど、そのケースでは漏れる事が分かってます。
てか、最初それを例に書いてて、漏れて当たり前だと気がついて書き直した。w
つか元々真偽値の類いでは無い値も返す関数で真偽値の比較をする事が間違いでは?返り値-1とかは別の形で補足すべきだろ。
まあ「元々」といいだしたらBOOLと言って置きながら
3通り以上の区別しなきゃならん値を返すほうが間違いなんだが。
>>472 間違いだろうけど、存在するんだから仕方ない。
475445:02/11/10 00:58
>>462
> この場合、buf2に書き込みが行われる際にbuf1まで影響されないかと思ったんです。
> (もしくはその逆のbuf1に書き込もうとしたらbuf2にも影響が・・・)

だから俺が書いた話がそれなんだが。
あんたはその逆(WORD*をBYTE*に渡す)を書いてたんだが。

> > 今後sizeof(LPARAM) >= sizeof(long)の条件が崩れた場合恐いんですが。
> 呼び出す関数がブラックボックスなら、逆( <= )だと思うが。
こう書いたはずだが。

> 私の考えていたメモリリークの可能性ってのは分かって戴けたかしら?
> ていうか、メモリリークの危険は無いと思って良いのかな?たまたまかな?

それはメモリリークとは呼ばない。
バッファオーバーランなら分かるが。
>>471
なにをいってるか分からんのだが。
コンパイラが空けて配置するからいいと思ってるのか?
こういう風に消してしまうことがあると思うのだが。
#include <stdio.h>
void func(long * wd)
{
*wd = 10;
}
void main()
{
int i;
char buf[]={0,0,1,0};
func((long *)&buf[1]);
for (i=0; i<4; i++)
printf("%d\n", buf[i]);
}
>>458
それは逆だろう。
ハンドルとかポインタ返す関数の時はINVALID_HANDLEとかNULLと比較すればヨイ。
if(hoge())ならhoge()はBOOLを返すと思え。
478414:02/11/10 01:02
>>470
> ちなみに、最近のCPUでは、1バイトの変数でも4バイト境界や
> 8バイト境界に整列させて割り付けるのはあたりまえだし、
> doubleやlong longなど、一般的な環境で4バイトを超えるサイズの
> データ型は色々ある。(構造体とか配列とかも…)
どもです。了解しました。
つまり、メモリリーク(言葉の意味違う?)の可能性があるんですね。
>>441で書いたキャストして代入(short変数=(short)long変数)の例では
キャストで動作が保証(CPU依存?コンパイラ依存な気がする)される
ので、関数引数でキャストした場合も問題なく動くのかと期待してました。
>>414
メモリ リークってfreeのし忘れだが
こうしる。

BOOL bRet = hoge();
if(bRet){

}

>>452>>458の主旨は返り値の内容の意味がわかりやすいかどうかだから
↑みたくするなりコメントつけるなり好きにしる。
481445:02/11/10 01:05
> ていうか、メモリリークの危険は無いと思って良いのかな?たまたまかな?

多分変数を確保する時にBYTEも32ビット分確保されてるだけ。
つまり結果オーライになってるだけ。

呼び出し側を配列にして試してみるといい。
482414:02/11/10 01:07
>>475
すんません。>478書いてる間に色々レスを頂いてましたね。
完全に理解出来ました&何度も指摘して頂いてるのに勘違いしっぱなして
申し訳なかったっす。
キャストするのは止めます。
どもありがとうございました。
>>458
そうか?
if(hoge())
が真だと、とにかくfalse/FALSE/NULL/0ではないことがひとめで分かる。
484414:02/11/10 01:12
ちなみに、「リーク=漏れる」という解釈で「メモリ漏れ」という意味で
発言してたのでつよ。。
バッファオーバーラン・・たしかにそうですね。
バッファオーバーフローは? オーバーランと同じかな。
>>458はそもそも真偽値に他の情報を求めるからまずいんでねぇか。
486ががが:02/11/10 01:13
main(){int n,m,i,j;mat a,b,x;
a=matrix(n,n);b=matrix(n,m);x=matrix(n,m);
printf("Aはn×n行列、B,Xはn×m行列です。\n");
printf("n,mを入力して下さい\n");
scanf("%d,%d",&n,&m);
printf("A,Bの要素を入力してください。\n");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{printf("a[%d+1][%d+1]は?\n",i,j);
scanf("%lf,&a[i][j]");
} }
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
{printf("b[%d+1][%d+1]は?\n",i,j);
scanf("%lf,&b[i][j]");
}  }x = gauss(a,b,n,m);
freemat(a); freemat(b); freemat(x);
}
がコンパイルできても、実行できません。
mainの中が間違えてるっぽいんやけど。
誰か教えてください。ほんきわかんないんで。
配列とか、関数の定義は、できてる友達のと交換しても動くんで、このなかなんですけど









>>バッファオーバーフローは? オーバーランと同じかな。
違う
>>483
わかってないじゃん。
真だとfalse/FALSE/NULL/0以外の何であるか一目で分かってないし、
偽だとfalse/FALSE/NULL/0のどれであるかも一目で分かってない。
489452:02/11/10 01:15
>>477
>ハンドルとかポインタ返す関数の時はINVALID_HANDLEとかNULLと比較すればヨイ。
たしかにそうですね。すいません。

RegisterClassの場合はどのような記述がいいのでしょうか?
(returnはATOM型になっています)
猫でもわかるプログラミングでは

if (!RegisterClass(&myProg))
return FALSE;

このように記述されていますが。

>>480
参考にさせていただきます。

>>483
>が真だと、とにかくfalse/FALSE/NULL/0ではないことがひとめで分かる。
そういうことではなく、関数がどういうタイプの戻り値を返すのかが
わかりやすいコーディングがしたいだけです。
真であるか偽であるかは、別の話なわけで。
>>486
スマン ワラタ
>>483
同意。
漏れは
if(hoge())
という書き方して
if(strcmp(hoge, sage) != 0)
という書き方でこっちのほうを明示的視覚的に分かるようにしてる
バッファオーバーラン=バッファオーバーフロー
真偽値を返す関数は関数名を
is... とか has... とかにすればよい
>>488
if(hoge())はそんなこと知らなくてもいい。
495414:02/11/10 01:19
>>487
>>492
どっちなんでしょか・・
IsTrue/IsFalse関数(マクロ)を作ればいい。
> ちなみに、「リーク=漏れる」という解釈で「メモリ漏れ」という意味で
> 発言してたのでつよ。。

アスキー用語辞典より
http://yougo.ascii24.com/gh/26/002659.html
>>494
適当にやるのは良くない。
499492:02/11/10 01:22
>>495
つか、自分で調べろよ。俺は調べたが。
>>498
どれか知りたいなら比較すりゃいい。
501452:02/11/10 01:25
すこし頭がごっちゃになってきましたが

1.ポインタやハンドルのときはNULLやINVALID〜などで比較する
2.bool値の場合は省略
3.矛盾している関数(GetMessage等)は個別に対応する。

ってのが、シンプルで確実なんでしょうか。
>>489
> if (!RegisterClass(&myProg))
> return FALSE;

RegisterClassの戻り値自体が必要なのではなくて、戻り値が真か偽かがわかればよいのだから
他の情報を求めなくていいじゃないか。
503452:02/11/10 01:28
>2.bool値の場合は省略
trueかfalseしか返ってこないのであれば、0であることが確定している
falseと比較する。ってものありましたね。
504414:02/11/10 01:28
>>499
調べますた!
同じってことで理解しますた!
@IT用語辞典にて
関数が適当な名前だと省略すると定義を調べるまでbool値だと分からない罠。
たいてい成功したら非ゼロ、失敗ならゼロを返すんだから
if ( hoge() ) ...
if ( !hoge() )...
で十分。そうでない場合だけ個別に対応すればいい
わざわざ
if ( hoge() != NULL )...
if ( hoge() == NULL )...
なんてやるやつはDQN
でも!=FALSEは否定の否定だから何もつけない方が却って読み易いと思う。
プログラミング作法か何かに載ってたが。
>>506
NULLと比較している時点で、こいつのレベルが分かってしまうんだが。
INVALID_HANDLE_VALUE だけは特殊だが、
false、FALSE、NULL は 0 である事が保証されている。
488 は何でこれらを区別したいのかわからん。
>>508
501 を受けて書いたのですが
!=FALSE を付けるかどうかは、完全にプログラミングスタイルに拠る。
あってもなくても、コンパイラは同じコードを吐く。
例え最適化オプションが ON になっていなくても。
512デフォルトの名無しさん:02/11/10 01:34


結論としてはbool型が無かったC言語が糞ということでよろしいですね。
513511:02/11/10 01:34
つまり、どっちでもいい。
どっちかでならなければならないというのは間違っている。
>506
「ポインタやハンドルを返す」なら、返ってきた値捨てるなよ
他人が見ても分かりやすいようにする方針なら!=FALSEを付けるというだけだろ。
if((fp = fopen("hoge", "r")) == NULL)perror("test.c");

スタイルの話ならもうやめようぜ。
元質問はTRUEと比較するとまずいのでは?って質問なんだから。

A. はい、まずいです。どうしても比較したいならFALSEとしてください。

これで終わりなはず。
>>514
おまえは fgets() を使ったことがないのかと
おれとしては
#define TRUE !FALSE
とかして
if(hoge() == TRUE)とかの方が良いな。
とにかく二重否定は避けたい。
なんだよ、うまい具合にNULL論争にチェンジさせる気かよ。
521デフォルトの名無しさん:02/11/10 01:39
今のコンパイラじゃ どっちも変わんないよ。
if( hoge ){}
ってやると ぱっと見 変数が ポインタか実数かわかんないじゃん。
んなことで
if( NULL != hoge ){}
支持。


>>519
もうネタはけっこう。
523496:02/11/10 01:40
オレの意見はそんなに馬鹿らしいか...
>>514
お前はstrchrの結果も必ず保存するのかと
ネタと言えば、これは Microsoft 社きってのネタか?

IE の中止ボタンがしいたけに見えて困る
http://w3j.org/nazokb/jp4110000.html
>>519
ワロタ
>>522
アホ
$ grep glib.h -e "TRUE.*FALSE"
#define TRUE (!FALSE)
>>519
hoge() が !FALSE を返してくれる保証があるならそれでもいいが。

>>523
面倒なだけだと思う。
>>527
お前がアホ。
ネタと書かれた意味がわかってない。
530514:02/11/10 01:44
506を受けて書いているので、引数はないことを前提にしているのだが
>>527
あふぉはおまえ
if ( hoge() == TRUE )
がネタだっつってんの
>>529
いや、おまえの方がアホ。
俺の書いた意味が分かっていない。
>>527
>>528

>>530
煽りだから気にするな、言いたい事は分かる。
早くも 514 が負け惜しみを言い初めました
はっきり言ってこんな事は仕事でプロジェクト組んで
やっていれば、いやでも読みやすいようにし向けられるので
どうでも良いのです。
人はそれをコーディング規約と呼びます。
コーディングスタイルの話は心底どうでもいい。
>>535
それには語弊があるぞ。
読みにくいように仕向けられるのコーディング規約なんか山のようにある。
>>537
例: GN(略
スタイルの問題だと重々承知しているのだが、
if(hoge)
で、
ifの仕様からしてhoge自体が真偽値/ポインタなら、さらに明示的に比較するのは
俺は抵抗がある。
コーディング規約の規約を作れ。
541デフォルトの名無しさん:02/11/10 01:50
BOOLについて考えてみる。
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|


ハンガリアンとかな
スタイルの話を「そうだねー。それもいいねー。」くらいに軽く流すならいいが
決まって熱くなる奴がいるから続けたくないんだよなぁ
>>539
C言語のifの仕様からして抵抗がある。
ifの中身は本来は真のbool型(true/falseのみ)でなければならないはずだ。
ついでにそんな所で代入できちゃいかん。
>>543
スタイルを強制されたこと無いだろ。
546デフォルトの名無しさん:02/11/10 01:52
TRUEとは比較せずにFALSEと比較することで満場一致の様子
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|
ハンガリアンは糞
C++なら、
if(HOGE *hoge = get_hoge())
って書けるが、これは明示的に比較する形で書けない。
>>545
愚痴はマ板逝け。
550デフォルトの名無しさん:02/11/10 01:54
bool型が無かったC言語が糞ということでよろしい!
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|
551デフォルトの名無しさん:02/11/10 01:55
しかしそれではワンパターンとの声により再び議論
    ∧_∧                       ∧_∧
    (  ´Д`)     ∧_∧              (  ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|
週末なのに論争もなくて寂しいからって、プログラミングスタイルという伝家の宝刀を抜いちゃいかん。
C言語のifの仕様がすべての元凶
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|
>>544
C では、非 0 が真であると明確に定義されていますが何か?
>>549
図星だからって誤魔化してもダメだよ。
556デフォルトの名無しさん:02/11/10 01:57
そのAAキモイ
>>554
そもそも0とか非0がbool型にキャストできるのがおかしい。VBじゃあるまいし。
bool型だってどうせ中身は0と非0だろ?
だから何で C++ でもないのに bool の話をするんだ?
    ∧_∧                        ∧_∧
   Σ( ;´Д`)     ∧_∧            Σ(; ´Д`)     ∧_∧
   /    \   Σ(´Д`; )           /    \  Σ(´Д`; )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
|| Σ(    ;)     ~\_____ノ|  ∧_∧. ||Σ(    ;)     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|Σ(´Д`; ).  _/   ヽ          \|   Σ(´Д`; )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___Σ(    ;)      ~\_____ノ|  ∧_∧ ___Σ(    ;)      ~\_____ノ|   ∧_∧
.         _/   ヽ          \|.Σ(´Д`; ).    _/   ヽ          \| Σ(´Д`; )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|
>>531
ちゃんと文読め。
二重否定を避けたいって書いてるだろうが。
どの話を受けて俺が書いたか考えろ。
VB じゃあるまいし、ってあたりが根拠レスだよな。
何がおかしいと考えてるのかわからん。
#define CMP(s1,op,s2) strcmp(s1,s2) op 0

CMP( "afo", ==, "vaka" );
コーディング時に
気をつければいいのだが、
if文の中に関数を書くのにも多少抵抗がある。
たとえで言うのなら、
if(hoge())
では式の評価が関数一つなので問題はないが、
if((hoge() && hage())
ではhoge()の結果が偽であればhage()は実行されない。
気をつけて書けば、実行速度が良くなるのだが、
評価順序を間違えるとバグの原因になる諸刃の剣。
>>560
ナニをいまさら...(w
あわてて glib 持ち出したのはおまえだろ?
>>560
> if(hoge() == TRUE)とかの方が良いな。

> とにかく二重否定は避けたい。
がどう繋がってるのかちっとも読めない。

第一みんな、if(hoge() == TRUE) の弊害の事を指摘してるのであって、
二重否定うんぬんの話は誰もしていない。
>>558
仕様と実装の区別がついているか?
さっそくスタイルについて熱くなってるわけだが
568デフォルトの名無しさん:02/11/10 02:07
/\ |  /|/|/|  ドドドドドドドドドドドド!!
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|     (´⌒(´⌒`)⌒`)
  |  /  /  |文|/ // /  (´⌒(´祭だ!!祭だ!!`)⌒`)
  |/  /.  _.| ̄|/|/|/    (´⌒(´∧ ∧⌒`)`)`)⌒`)
/|\/  / /  |/ /     (´⌒(´(,゚Д゚ )つ `)`)
/|    / /  /ヽ  (´⌒(´⌒  (´⌒( つ |〕 /⌒`)⌒`)
  |   | ̄|  | |ヽ/|  遅れるな!!   ( |  (⌒)`)⌒`)
  |   |  |/| |__|/.   ∧_∧ ⌒`).ドし'⌒^ミ `)⌒`)ォ
  |   |/|  |/  (´⌒(´( ´∀` )つ  ド  ∧_∧⌒`)
  |   |  |/    (´⌒(´( つ/] /    ォと( ・∀・ ) 突撃――!!
  |   |/        ( |  (⌒)`)  ォ ヽ[|⊂[] )`)
  |  /         (´ ´し'⌒^ミ `)`)ォ (⌒)  |
>>561
じゃあVB〜は取り消すよ。
数値とbool(真偽値)は全く別の概念だろ。それを相互に変換する理由が無い。
>>558
ほう、仕様ね。
で、C++ の話だとしても、0 や非 0 が bool 型にキャストできるのがおかしい
と思う根拠は何だ?
#define TRUE 1
#define FALSE 0
#define !TRUE FALSE
#define !FALSE TRUE love
>>570
別の概念だから。
組み込みのbool型とtypedefと#defineを使ったbool型はどちらも使い勝手は変わらないと思うんだけど。
>>569
言語仕様で、できるようになっている。
その方が便利だからだ。
(多くの CPU は 0 と非 0 を判定するのに便利に命令セットを持っている)

その仕様を否定したいなら、変換してはならない理由を示せ。
>>570
> で、C++ の話だとしても、0 や非 0 が bool 型にキャストできるのがおかしい
> と思う根拠は何だ?

ハァ?
俺はそんなことはひとことも言っていませんが。
==TRUEの弊害はネタもとがちゃんと推測してるし、その後の数レスで終わってる。
いまはスタイル論争だけ。
577デフォルトの名無しさん:02/11/10 02:14
>>486
scanfが間違い。
>>572
別の概念だとキャストできるのがおかしいのは何故だ?
真偽値だろうが数値だろうが、データはデータだ。
変換できておかしくは無い。
579570:02/11/10 02:15
>>575
スマソ、なんか混乱してるYO
もう話の焦点もぼけてぐだぐだです
>>573
否。
組み込みの bool 型は、非 false を受けた時 必ず true と認識する点で
typedef / #define とは明確に違う。
>>573
たとえ、
#define TRUE !FALSE
にしたとしても、
BOOL b = TRUE;
で困る。
>>581
#define false 0
#define true (!false)

こう定義すれば非falseは必ずtrueになると思うが
>>574
0と非0を判定するのに便利な命令セットを持っていることは
キャストできるのに便利な理由になっていない。
true/falseの実装が0/非0にすれば判定が便利になる命令ってだけだ。
よって変換できる理由は無い。ちなみに無いのもの理由を出すことは不可能。
585570:02/11/10 02:19
566 を指したかったの
586デフォルトの名無しさん:02/11/10 02:20
わかったから、とりあえず名前付けてくれ。お前ら。誰が誰だか
さっぱりだ。
>>574
人はそれを0フラグと呼びます。

そしてOSのシステムコールではえてして
0が真となる仕様となっております。
>>587
真とか偽の問題じゃなくて、-1(負?)がエラーってだけだろ。
>>583
なんないでしょ
590570:02/11/10 02:22
>>583
true 以外にも非 false 値はあるだろ。
それを受けたらどうなるんだ?
>>589
なんで?
!0==!0は真にならないの?
>>578
別の概念であってもデータである以上キャストはできるが
キャストした結果意味があるとは限らない。
数値(文字コードではなく)を文字にキャストしても意味は無い。
数値を真偽値にキャストしても意味は無い。
>>589
! を根底から覆す画期的意見だな!
594誰が誰だか:02/11/10 02:23
#define TRUE 1
#define FALSE 0
#define !TRUE 0
#define !FALSE 1
名前
>>584
0 と非 0 を判定するのに便利な命令セットを持っている事に着目して、C では
0 を偽、非 0 を真として扱う仕様になった。
その偽を false、真を true にそのまま変換したいと言う要望は無視するのか?
>>590
プログラマがtrueかfalse以外を入れようとすることまで面倒見切れるかよ。
>>587
関係無い話を持ち出すなよ。
>>591
!0 は 1 になる(よね?まあ、1でなくてもなにか特定0以外の数字になる)
で 3 や 5 は非false な訳だが、
true == 3
は偽になる
>>590
面倒見てるのが bool 型だろ。
>>598
非falseは!falseでしかない。
それ以外を入れようとすることまでは面倒見切れない。
601599:02/11/10 02:27
596 でした。また同じ間違い・・・
591だが、これは困らなかったよ。
>>595
最初っから真偽値型を作らなかったCが糞なだけ。
もし最初っから真偽値型があったのなら数値型に変換できる理由は無い。
>>600
だから、組み込み型ならそれでもOKなんだってば
>>599
そこまでする必要あるのか?
&と|もな。
607デフォルトの名無しさん:02/11/10 02:28
             ∧         ∧               ###
            / ヽ        ./ .∧             /#####ヽ
           /   `、     /   .∧           /  ##### \
          /       ̄ ̄ ̄    ヽ          /   #####  ヽ
          l:::::::::              .l       /    #####   ヽ
         |::::::::::  -==・-    -==・-  |      |          ::::::::: :::::::|
         .|:::::::::::::::::   \___/    |      |  -・==-   -・==- :::::::::|
          ヽ:::::::::::::::::::  \/     丿      |    \___/  :: ::::::::|
          ヽ:::::::::::::::::        /       ヽ      \/    :::::::::::|
     ____>:::::::::::::::::       <_        ヽ        ::::;;;::::::::丿
    /:::::::::::::::::::::::: :::::::::          /⌒ヽ⌒、⌒、⌒、      ::::::::: :<___
    |::::::::::::;;;;;;;;;;;;;:::::::::::::::        / /ヽノヽノヽノヽノ       :::::::::::::  :::::::: :::ヽ
   |::::::::::::::::::::::::            /  /:::::::: :::::::::::::::::::::           ::::::::
         bool論争しに行こうか?             いいねぇ〜
貼っとこう。

詭弁の特徴のガイドライン
http://ton.2ch.net/test/read.cgi/gline/1028811653/
1:事実に対して仮定を持ち出す
「もし最初っから真偽値型があったのなら」
             ∧         ∧               ###
            / ヽ        ./ .∧             /#####ヽ
           /   `、     /   .∧           /  ##### \
          /       ̄ ̄ ̄    ヽ          /   #####  ヽ
          l:::::::::              .l       /    #####   ヽ
         |::::::::::  -==・-    -==・-  |      |          ::::::::: :::::::|
         .|:::::::::::::::::   \___/    |      |  -・==-   -・==- :::::::::|
          ヽ:::::::::::::::::::  \/     丿      |    \___/  :: ::::::::|
          ヽ:::::::::::::::::        /       ヽ      \/    :::::::::::|
     ____>:::::::::::::::::       <_        ヽ        ::::;;;::::::::丿
    /:::::::::::::::::::::::: :::::::::          /⌒ヽ⌒、⌒、⌒、      ::::::::: :<___
    |::::::::::::;;;;;;;;;;;;;:::::::::::::::        / /ヽノヽノヽノヽノ       :::::::::::::  :::::::: :::ヽ
   |::::::::::::::::::::::::            /  /:::::::: :::::::::::::::::::::           ::::::::
         TRUELOZVE?              FALSE
発端は南蛮だっけ?
>>605
boolなのにtrueと比べられないよりいいだろ。
>>565
だからちゃんと読めって!
俺は!=FALSEと書くよりも==TRUEが良いと言っているだけ。
if(hoge()==TRUE)の弊害?
アホか。
>>609
苦しくなったからって誤魔化すのはやめろ
true,falseより非0,0の方がわかりやすくていいな・・・
そういう書き方に慣れているからだろうけどね。
>>613
>>528>>598 を見ていないのか?
それともその上で言ってるのか?
>>613
その話はとうの昔に終わってんだよハグェが
==TRUE はやめろ。どうしてもやりたいなら != FALSE
過去ログ読んで回線切って師ね
「if文中の式の真偽」と
「_Bool/book変数が保持する真偽」
の区別が付かない香具師がいるな
book->boolナ
620デフォルトの名無しさん:02/11/10 02:34
book変数age
C言語最高!
boolだとかガキ向けの言語仕様はすっこんでろ。
大人ならば全て自分の責任で判断するのさ。
0,非0でやっているからこそ文字列の終わりが偽となって便利なんだよ。
C の組み込み型に book 型キボン
624デフォルトの名無しさん:02/11/10 02:36
ああそういえばC99には_Boolなんてのがあるんだっけ?
>>609
だからね。
>>595 のように、そのような仕様になっている理由はちゃんとある。
それを糞と呼ぶのは自由だが、「もし最初っから真偽値型があったのなら」 なんて
絶対あり得ない仮定はもっとクソだって言ってるの。
603 の方が苦しい発言だろうが。
return TRUE;

return !TRUE;
だらだら長く書いて結局言いたいことは「だからそんなCは糞だ」
そんなのは頼むから他スレ行ってやってくれよ。
628625:02/11/10 02:37
またやった YO・・・
宛先は >>614
>>625
だから数値と真偽値が変換できる必要性を示せ。
利便性ちゃうかと
631!625:02/11/10 02:39
>>629
俺はそもそも真偽値(bool型)なんてない方がいいと思っているんだがどうだ?
632デフォルトの名無しさん:02/11/10 02:39
>>629
>>622というわけだ。
>>629
595 を読んでまだ分からないか?
アフォですか?
>>632
文字の終わりは\0だろ。
>>631
時代遅れ

>>632
どう便利なの?
636デフォルトの名無しさん:02/11/10 02:41
>>634
\0は偽ですが。
もしもfalseのみ偽となり、0と互換性がなかったら偽とならず不便だ。
>>633
>>595は0/非0を判定する命令があっても数値と真偽値が変換できる必要性とは
関係ないと反論した。
>>629
おこちゃまですか?
>>635
・・・・・・・・。
Cでプログラム書いたことある?
>>636
だからどう不便なんだYO!
おまえら不便って言いたいだけちゃうんかと(略
641デフォルトの名無しさん:02/11/10 02:43
なぜ数値と真偽値が変換されうるのかという声が上がり再び議論
    ∧_∧                       ∧_∧
    (  ´Д`)     ∧_∧              (  ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|
>>636
なにが不便なの?
>>640
strlenとか自分で書いてみれば分かると思うが
>>639
ある。
ちなみにおまえは C 以外でプログラム書いたことあるのか?
>>644
Perlを少々・・・
あれは文字列をひとつのものとして扱えるから。
646デフォルトの名無しさん:02/11/10 02:44
真が非0ではそんなに不満なのか?
647デフォルトの名無しさん:02/11/10 02:45
>>646
俺は不満じゃない。
>>643
strlenでは文字のポインタが\0になるカウンタを+1しながら
まで繰り返すだけだろ。
649デフォルトの名無しさん:02/11/10 02:46
bool main(){
return true;
}
のほうがいいですか?
>>648
例はstrcpyの方がいいか。
651648:02/11/10 02:47
訂正
strlenでは文字のポインタの値が\0になるまでカウンタを+1しながら
繰り返すだけだろ。
ch != '\0'
良いじゃん、これで。
今日は論争っぽく流れ早いけどあんまりおもしろくないな。
>>649
void main()がいい
>>646
真が非0に、偽が0に”変換できる”ことが不満。
while(<STDIN>){
print;
}
>>637
反論になってないよ。単に反対しただけだろう。
>>649
mainは真偽値を返すのではなくエラーコードを返す方がなにかと便利だから
やっぱりintがいいんじゃない。


              不満・愚痴は死滅スレかマ板で


660デフォルトの名無しさん:02/11/10 02:50
0 == 0ってどんな値を返すの?
>>657
反論になってる。よく読め。
662デフォルトの名無しさん:02/11/10 02:50
while(<>){
print;
}
663デフォルトの名無しさん:02/11/10 02:50
Cに真偽値が追加されても(C99には既にあるみたいだが)、実際に使うことはなさそうだなー
Perl厨はきえろ
>>663
追加された意味がわからない人ですか?
>>661
どこが反論になってるかさっぱり分からないから、レス番号とその分を示せ。
>>663
真性のあふぉだな。ないと困るという声が強かったからこそ
わざわざ追加されたのに
668デフォルトの名無しさん:02/11/10 02:52
>>665
世の中の潮流に合わせただけだと思っているんですけど。
でも使うことはなさそう。
ctype.hもあるからな。
670デフォルトの名無しさん:02/11/10 02:53
>>667
おいおい。使われることはなさそうなんて言っていないぞ。
"俺は"使うことはなさそうと言っているだけ。
671デフォルトの名無しさん:02/11/10 02:53
だから、お前らちゃんと名前欄に番号とかいれろ。誰が誰だか
さっぱりだ。
>>666
じゃあ反論になってないと言うな。レスぐらい読め。
>>670
分かってるよ
つまりおまえは真偽値型の必要性が分かってないんだろ?
今のCのif文になにか不満でもあるの?
非0が真で0が偽でいいだろ。
676デフォルトの名無しさん:02/11/10 02:55
>>667
どの辺が困るんだったっけ?
677デフォルトの名無しさん:02/11/10 02:55
>>673
ああ。
なくても全然困らないし。
678デフォルトの名無しさん:02/11/10 02:55
自身の無い奴だけデフォルトで逝け。
TRUEと比べられないというアホみたいなことがなくてすむ。
>>669
・・・今までの話と何の関係が?
string.hもあるしね
682デフォルトの名無しさん:02/11/10 02:57
TRUEってのは何だ?
>>679
どういうときにTRUEと比べるの?
>>679
あぁ、そうだった。
>>672
読んで分からなかったから訊いただけだ。
それとも、反論があることを証明できないのか?
その方法は簡単、666 の事を実行するだけだ。
そうしてくれないなら以降無視する。
やっぱFORTRAN最高!
ああそうか。
俺はtypedef&#defineのboolを使ったことがないから、真偽値の必要性がわからないんだ。
>>680
ctype.hにはishoge系の関数があるだろ。
過去の資産もあるからそう簡単には変えられないだろうと言いたかった。
>>683
わからないが、617 はそう書けと主張している。
690680:02/11/10 03:00
>>688
あ、了解。なるほどね。
691687:02/11/10 03:00
しまった・・・&#と書いたら?になっちまった。
typedef & #define
>>691
トークンはホワイトスペースで区切る癖をつけた方がいいぞ。
693デフォルトの名無しさん:02/11/10 03:02
ホワイトスペースって何?
>>688
型が変わる程度でロジック弄る必要はないのでは?
695687:02/11/10 03:02
>>692
はぁ・・・
プログラム書くときも開けていないや。みにくいかな。
696デフォルトの名無しさん:02/11/10 03:02
Cでオブジェクト思考する方法を教えてください
697687:02/11/10 03:03
>>693
isspaceが真を返すものかな?
スペースとかタブとか改行とか
>>696
ちょっと待ってろ。
>>696
勝手に思考してください
マジレスすると、GTK+ とかが参考になるかもね
                              γ      γ
       ∧_∧   bool 論争終わり?             γ
       (::::::::::: )   なんだか寂しいな・・・       ......................................
      .(○::::::: )                      .::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::........
     ~"''"""゛"゛""''・、                   ...:::::;;;''        ';;;:::::.......
 "”゛""''""“”゛゛""''' "j'                 ...::::;;;''            '';;;::::::.........
 :::::ヘ :::::....ヽ :::;;;ノ  ::(                ....::::::;;              '';;;::::::::::.......
 ::  ゝ  :::::......ノ:;;../  ~~^^ ~~~~~^^^~
まあ、整数値が真偽値に変換できたほうが便利と言ってるやつらは
軒並みあふぉだったことは分かった
単項演算子と識別子の間は、空けない方が見やすいかも。
>>700
enum bool = { FALSE = 0, TRUE = 1, ERROR = -1};
これをやろう。
>>703
ネタ
>>694
その形が変わるのがちょっとなぁ。
一方の自作ishogeは_Boolで既存のライブラリはintは違和感がある。
13:勝利宣言をする
「まあ、整数値が真偽値に変換できたほうが便利と言ってるやつらは
 軒並みあふぉだったことは分かった」
だいたい真偽値っていってもマシン語コードにしたら整数値なんだから
それらを区別する意味って何かあるの?
オマエラこんな毎晩論争してんの?
お疲れさん。
709デフォルトの名無しさん:02/11/10 03:11
便利というか簡潔になる。
char *s;
for (s=str; *s; s++)
....;
とか。
>>707
同じようなこと言ったら、仕様と実装の区別が付かない阿呆と言われますた。
>>709
その代わり分かりにくくなるけどね。
712デフォルトの名無しさん:02/11/10 03:15
>>711
まあ、Cではこう書くもんだと慣れた。
>>709
for ( s=str; *s != '\0'; s++ )
でも十分簡潔だが?分かり安いし

まあ、おれは 709 で書くけどな
ばかばっか
>>711
慣れの問題じゃない?俺は比較してるほうが読みにくいかも。
*sより*s!='\0'の方が「'\0'になったら終了」って言う意味では分かり易い。
>>707
そんなことを言ったらすべてのデータはバイナリなんだからと区別する意味ってあるの?ってなりますよ。
高級言語になればなるほどマシン語コードから離れてより概念的なものになるもんです。
漏れの使ってるコンパイラの吐くコードは、*s でも *s! = '\0' でも変わらない。
だからどちらでもいい。
前者は C プログラマにわかりやすい。
後者は他言語プログラマにわかりやすい。
719デフォルトの名無しさん:02/11/10 03:19
>>716
それならuntilとかの方が分かりやすい
*s=='\0'ってなるから。
ん?
701=714 は 685 に答えられなかった 672 なの?
>>717
個人的にはCでは区別しなくてもいいと思ってます。
>>718
他言語プログラマはそもそも文字列が文字の配列ってのがやりにくいかも。
717 は C が高級言語だと信じているのか?
724デフォルトの名無しさん:02/11/10 03:21
>>722
いや、配列がコピーされて関数に渡らないことのほうが・・・
>>723
717じゃないが、+で二つの値を足せるだけでも十分高級だと思うが。
>>720
おいおい、おれは 701 だが 714 ではない。 672 も知らん。
>>726
いいから釣られるなよ。 
728デフォルトの名無しさん:02/11/10 03:23
>>725
アセンブラでもできると思うが。
725 が衝撃的事実を発表しますた
730デフォルトの名無しさん:02/11/10 03:24
>>719
まぁuntilなんて予約語は無い訳だが。
>>719
そりゃそうかもしれんが、ここでは
for ( s=str; *s; s++ ) と
for ( s=str; *s != '\0'; s++ ) の場合だろ。
つうか前者ようなコードを初めて見て後者のコードと同じ意味と
すぐに分かった奴っているんだろうか?
>>724
・・・どういう事?
引数に指定すれば配列丸ごと値渡しになるけど、そういう事ではない?
printfがあるだけでも高級だと思うが。
>>728
アセンブラだともっといろいろかかないとだめじゃん

>>729
一応高級言語は環境に依存しないという意味だってことは分かっています(^_^;)
#define until(x) while(!(x))
>>732
配列の先頭アドレスの値渡しだろ?
配列がコピーされるわけじゃない。
>>731
while (*s++ = *t++);
とかもな。
>>一応高級言語は環境に依存しないという意味だってことは分かっています(^_^;)
そんな意味だったっけ?
Cが高級言語って知らない奴がいるのか?
それとももっと高級な言語が出てきたからCが低級言語にでもなったとでもいうのかな。
740734:02/11/10 03:27
>>738
ちがかった?
マシンに近ければ近いほど低級で、人間に近ければ近いほど高級だと思っていたけど
>>731
初めて見てそう判断するのは難しいが、そのような人は C プログラマーとは
言えないだろう。
printfはc言語の一部では無いけど。
>>734
RISCじゃないのは1命令で書けますよ
買わないといけない言語は高級言語・・・俺のリアル厨房の時の理解
C は、アセンブリ言語に比べれば間違い無くレベルが高いが、高級言語と呼んで
いいかどうか迷うくらいにはそれとのレイヤーが薄い。
add $s0,$t1,$t2; $s0=$t1+$t2
747デフォルトの名無しさん:02/11/10 03:30
>>745
高級アセンブラ・・・
748734:02/11/10 03:30
Cは高級言語の中では低級な部類だと思っている。
でも低級言語だとはおもわないなー
昔は高級言語だったが今は高級言語ではない
今度はC言語は高級言語か論争かよ。
751734:02/11/10 03:32
>>749
ソウダッタノカー(TДT)
比較があっての高級低級であり
何と比較していたか、または何と比較しているかが本質と思われ。
そこを統一しないと永遠に論争は解決しないと思われ。
>>746
個々の環境の命令によらず+で足せるのは高級だと見ていい?
744 に則れば、ほとんどの言語が高級言語ではないな。
>>754 COLDFUSIONはかなり高級
厨房言語==高級言語
>>754
Delphiを低級言語っていうな!
>>747
アセンブリ言語とは明確に違う。
アセンブリ言語はコードに無い動作は絶対にしない。
C はある程度の裏処理があり、また逆に最適化によって書いてあるコードが実行
されない場合もある。
何が高級言語かって決まっているもんじゃないのか?
>>759
学校でそう教えられたんだね。よしよし
>>759 MS-DOS バッチファイル
だれだ、このスレの最適化オプションを偽にしたのは?
Cは高水準言語だけど、文字列の扱いとかは低水準って言われるね。
だからC++ではstd::stringなんか使うわけで。
仕様です
>>758

x86命令からさらにマイクロコードに変換されて実行される
最近のIntelのCPUとかだとそうとも言えんのでは・・・・・・。
結局、752 が妥当だろうな。

ただ、アセンブリ言語が一番低級なのは間違いない。
それよりレベルを下げると、ソフトウェアではなくなる。
機械語を忘れてませんか?
768デフォルトの名無しさん:02/11/10 03:41
環境は言語の高級さに関係無い。
言語仕様にのみ関係する。
高級言語で検索したらC言語が引っかかった
>>768
言っていることは正しいが場違い。
>>769
それが正しい根拠は。
検索エンジンの検索結果が正しいなら、いくらでも自作自演できるが。
#define 低級 アセンブリ言語
#define 高級 (!低級)

(^o^)/
ひょっとして>>4の言うように1000取り合戦が始まっているのか?
>>772
機械語は高級言語だたのか
if (C言語 == 高級)
という風にしたいんですが・・・
>>775
それじゃダメだよ
!低級
とした時点である値に決まってしまうから
>>775
日本語の識別子が利用可能なコンパイラを使用してください。
778デフォルトの名無しさん:02/11/10 03:47
ん? で結局C言語がboolが数値に、数値がboolに変換できるようにした必要性はどうなったの?
>>776
じゃあ if (C言語) ってすればいいんですか?
>>773
すまん、それ漏れが貼った
>>780
論争を引き起こした張本人はあんたか!?
>>778
それは便利だ(と思われていた)から。今となっては時代遅れだが
気付いたときには時すでに遅し。

>>776
もしくは if (C言語 != 低級)
7834=780:02/11/10 03:50
>>781
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、すまなかった
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
もともとC言語にboolなんてあったのか?
(!0):0で無いもの(であるべき)

>>784
ない。
C99には_Boolってのがあるらしいが。アンダーバーが決め手☆
>>785
コンパイラが複雑になるわけだ、それだと
(!0) -> (!偽) -> (真) -> 真
789デフォルトの名無しさん:02/11/10 03:54


             腹  減  っ  た  。

     ラ  ー  メ  ン  で  も  食  う  か  。

しかしあれだな。
真偽値がないと困るって言ってるヤツは
Cでまともなプログラムを書いたことのない
他言語使いなんだろうな。

分かってるふりして参加してるだけ。
まともなプログラム書いてたら真偽値型が欲しいと思うんだけどな
>>791
いや、お前は間違いなく他言語使い。
無いと(表記がバラバラで統一されていない事により弊害が出る為)困る
>>789
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、うまい豚骨ラーメンを食ったことがない
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
Cから始めた人なら使うことはあまりなさそうな気もする。
>>793
表記がばらばらってどゆことよ?
>>792
他言語使いってナニよ?
おまえはC言語しか使ったことないヒキコモリオタなんだろ?
798もまずにパピコ:02/11/10 03:59
うまくいえねーけど真偽値型ってプリミティブじゃねーよな。
> 無いと(表記がバラバラで統一されていない事により弊害が出る為)困る
たとえあっても表記はバラバラになると思うが。

ゼロ/非ゼロだけで十分。
真か偽かが問題のときは if (b) か if (!b) でしか書かないからな
bool,_bool,__Bool,BOOL
>>800
ところが、わざわざ TRUE と FALSE を定義して
if ( b == FALSE )
したがるやつがいるわけですが
>>798
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、intで十分。
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
if (b) と if (!b) に統一する!!
> 他言語使いってナニよ?

Cの基本を少しかじったてみただけのくせに
その仕様の是非を語っている厨房のことだが。
つまりお前みたいな奴ね。
>>805
では次は算術シフトと論理シフトについて語ってみようか。
807805:02/11/10 04:03
訂正。
× Cの基本を少しかじったてみただけのくせに
○ Cの基本を少しかじったみただけのくせに


>>805
(゚Д゚)ハァ?
おまえはひきこもって仕様書ばっか読んでて
実際にプログラム書いたことなんてないんだろ?
>>806
Cと関係ないような
>>799
例え自分が使わないとしても規格として存在しているなら今後bool型を定義する奴は
少なくなるしソースを読む側の負担が減る。
>>809
あるよ。明示的に論理右シフトする方法がCにはない
引きこもりに引きこもり呼ばわりされちゃったよ。
>>810
じゃあ if (b == FALSE) と書けと言うのか?
>>811
それなら(unsigned int)ってすればいいと思うけど
>>811
unsigned でもダメか?
>>814
あれ?それじゃダメだったんじゃ.....うる覚えスマソ
うる覚え・・・
>>813
そんな事は一言も言ってないが。
書きたくなけりゃ書かなければ良い。
>>816
大抵の処理系がsignedなら算術、unsignedなら論理になるってだけだと思った。
820デフォルトの名無しさん:02/11/10 04:12


              ラ  ー  メ  ン  食  っ  た  。

    イ  ン  ス  タ  ン  ト  だ  が  う  ま  か  っ  た  。



>>789 博多にでも逝ったらどうだ。

しかし正直、俺様用しおりって役に立たないな。
>>813
つまり if が bool 型しかとれないようにすれば
if ( b == FALSE )
なんて書こうとするばかはいなくなるってこった
unsigned なら確実に論理シフトになると思うけど違うの?
b == FALSE が bool 型にならんのか?
>>819
それって仕様で決まってる?
なんかしらんけど、ブール値の扱いが問題なら

#define isTrue(x) x==0
#define isFalse(x) x!=0

あたりにしといたら?
問題あったらココだけ置換して再コンパイル。

if(b==TRUE)だのif(b==FALSE)だのと書く人は、
C FAQ一回読んどいた方が・・・
>>824
だから大抵の処理系ではと言っているでしょ。
大体
if(hoge)と
if(hoge!=FALSE) とか if(hoge!=NULL)

if(!hoge)と
if(hoge==FALSE) とか if(hoge==NULL)

の違いって、パッと見て理解しにくいほど差があるか?

ある程度ソースを読んだ経験があれば、どちらの
スタイルで書かれていようが関係ないと思うんだが。
#define isTrue(x) x!=0
#define isFalse(x) x==0
>>823
だからね
if ( b == FALSE )
としたいやつらってのは b の型を
明示したいってことらしいのね
>>811
論理シフトじゃなくて算術シフトだろ。

符号付き整数型の右シフト>>が算術シフトであるか論理シフトであるかは実装依存。
論理シフトはunsignedキャストで符号無しにすればできる。
>>826
いや、だからそれが論争のネタになるわけですが
>>830
あ、逆だったのねスマソ
さっきラーメンを食った漏れは >>827 に賛成。
>>829
関数の中で変数の型がすぐに分からないほどナガーイ関数
書いてる馬鹿に取っては、問題なのかもねえ。
ちょっと待て、ブーリアン
ソースが込み入ってくるとif(hoge),if(!hoge)は見づらいと思う。
ブーレアンだろ
>>829
でも型くらい上の方みればすぐわかると思うが。
if (p == NULL) は分からんでもないが
if (b == FALSE) ってのは・・・
>>834
まあ、事の発端では変数でなく関数ってことだったんですが
if ( hoge() == TRUE )
てか過去ログ読まずにレスしないで
>>838
p や b が関数だった場合は?

==での型の明示にこだわってる奴はただの初心者。
>>841
それは大半の人間が分かってる
しかしプログラムを書くのは中、上級者だけではない
自分が分かりやすければそれで良いと思ってる奴は初心者。
>>840
if (hoge()) ...でいいと思うが。
hoge()の型が分からない?
返り値の型が分からないような関数使うな!!
>>836
聞きたい。
実際に込み入ったソースでそれを目にすると、どうして見づらいと思う?

型よりも意味付けの方が重要。
つまり関数が失敗か成功かなど。
>>844
型が分からんというより、見ただけで(調べないと)分からないのがいやってこと
だったと思う。本人じゃないので知らんが
>>843
Cプログラマならif(hoge==TRUE)よりもif(hoge)の方がわかりやすいだろ
BOOL型がないCで、TRUEやFALSEと必ず等価になる整数値って決められるのかな?
関数の戻り値なんて、関数仕様できまってるのは0と0以外だったりするでしょ?
別にそれはCの仕様じゃなくて、単なる約束事でしかないし。

NULLポインタをソース上で0(またはヘッダでデファインされるNULL)と書くのは、
0は整数ではなくてNULLポインタをあらわす特別なシンボルだからってのは知って
る上での議論ですか?これ。
>>849
述べていることは正しいけど、何を訴えたいのかが書かれていないよ。
>>847
別にわからなくてもいいような気がするけど。
重要なのはその関数を真偽の判定につかえるかどうかだと思う。
>>843
==があった方が分かりやすいと思ってる奴はただの初心者。
上級者ならどちらだろうが関係ない。
>>850
ごめそ。
だからBOOLをdefilneしてif(hoge==FALSE)だのというのは、閉
じてない世界で一般的につかうのはキケンでさえある用法だとオモイマス、
ということで。

外部とのコミュニケーションが全くない閉じた世界で、全てその
defineをつかうという「コーディング規定」があって、全員が
それを守る、と言う特殊な環境なら、まあいい・・・のかな?
どうも話がぐるぐる回っているようだ
>>835
既出だが、実例として glib があるのだよこれが
>>855
レス先間違った?
== があれかどうかを気にする香具師は DQN ケテーイという事でよろしいか?
858855:02/11/10 04:35
>>856
まちがった。>>853 です
859855:02/11/10 04:36
>>857
おぬしの日本語の方がよっぽどDQNなわけだが
860857:02/11/10 04:37
意味の通らなくなる誤字をしてしまった・・・

== があるかどうかを気にする香具師は DQN ケテーイという事でよろしいか?
いくら週末で論争に飢えているからといって一晩で同じ内容の論争を二回するな!
862855:02/11/10 04:38
>>860
よろしいが、とっくの昔に分かっていたことではある
>>853
#define TRUE 1
#define FALSE 0
ってして関数の中で return FALSE; とかするのはいいのよ。
でも真偽値のつもりで返してるなら
if (!hoge())じゃない?
>>853
ここでは FALSEが0 と(マクロ等を使って)定義されている
という前提の上で話をしているんだと思うが?

それでも何かいけないのか?
>>860

俺も賛成。
>>861
何が不満なの?
これの元の発言は、「『VCを前提』にBOOLのTRUEを比較したらまずいよね?」という内容で、
それについての答えは、「まずいよ。」で、とっくの昔に終了してます。
#include <limits.h>
typedef int bool
#define TRUE INT_MAX
#define FALSE INT_MIN
>>860
ということにしたのですね :)
870868:02/11/10 04:40
セミコロンつけわすれた
「== があれかどうかを気にする香具師」 って何か気になるな。
アレって何だろ。
>>871
訂正後につっこむ馬鹿ハケーン
873860:02/11/10 04:41
>>869
ええ。
>>868
どうせならこうでしょう
typedef enum {
TRUE = INT_MAX;
FALSE = INT_MIN
} bool;
>>867
(゚Д゚)ハァ?
誰が今そんな話をしてるの?
876855:02/11/10 04:42
ライブラリがその閉じた世界でそういうdefineをしていて、しかも
それを「仕様」として外部に公開しているなら、あとはそれをつか
うクライアントの責任ですね。

ただそれはそのライブラリのローカルルールであって、一般的で
あると思い込んでしまうべきではないとおもうのですが。

現在各々が担当しているプロジェクトが、それに準じるローカル
ルールを明示的に決めていて、そのプロジェクトを使用する側の
人間にきちんと公開する、というルールが守られるなら、BOOL
デファインしてもかまわないと思いますが。

それがCのルールだと思い込む人がいるのは危険だと思います。
あくまで(よくつかわれているけれど)ローカルルールだとい
うことで。
>>872
857=871 ですが何か?
878!855:02/11/10 04:44
まちがった。>>853デス。
>>877
なにぃ!?
> それがCのルールだと思い込む人がいるのは危険だと思います。
> あくまで(よくつかわれているけれど)ローカルルールだとい
> うことで。

はあ?誰がそんなこと思いこんでるんだよ?
>>876
で、その「仕様」がいろいろと混在するのが問題なわけですな
882!855:02/11/10 04:46
>>881
そですね。他のライブラリには他のルールがあるかも。
>>876は BOOL型がCの仕様だと思ってる奴がいると
思いこんでる一番痛いヤツ。
884!855:02/11/10 04:48
>>883
このスレに今いる奴にいるとは思わないけどね。
>>883
VC++初心者ならいても不思議はないが
>>879
で、どうなんだ?
「アレ」 が何なのか気になるのかならないのか?
昔のCだとgotoのラベルもintに代入できたし、
変数も(関数同様)型をつけずに宣言するとintになったそうだ。
>>887
変数を型指定無しで宣言って、どう書くの? auto?
非0が「真」だと簡潔に書けることも多いけど、間違えやすいことも確かだね。
まあ、それはCの設計者の選択ということだ。
浮動小数点でも0と非0で偽と真ってのはどうかと思うけどな〜
>>887
> 変数も(関数同様)型をつけずに宣言するとintになったそうだ。

それは関数外で?
関数内ならc;などと書くとなんの意味もない文だと解釈されるだけだと思うけど
> VC++初心者ならいても不思議はないが

そんなヤツはDWORDとかLPSTRとかもそう思ってるだろ。
話の次元が違うと思う。
892890:02/11/10 04:56
そうか、autoにstaticがあったか
>>888
main() { x , y = 1; ...}
BASICみたいだね。
処理系によってはintになるけど。<型無し

autoなんて予約語、ANSI以前はなかったと思うが…
>>895
あっただろ?voidはなかったけど
今何人いるの?
ANSI以前は標準規格がなかったから予約語は処理系によってばらばらだったんじゃない?
番号! 1!
2
4
       \                      /
        \                   /
          \                /
           \             /
             \          /
              \ ∧∧∧∧/
               <    俺  >
               < 予 し   >
               <    か  >
 ─────────< 感 い  >──────────
               <    な  >
               < !!!!  い  >
               /∨∨∨∨\
              /         \
            /            \
           /     (-_-)       \
         /      (∩∩)        \
        /                     \
903デフォルトの名無しさん:02/11/10 04:59
4++;
256
コテハンになろうかな。
ふむ、3人か.......
>>902
今までずっと自作自演ですか(爆
スレのローカルルールでトリップ必須とか
909897:02/11/10 05:05
907は漏れっつーことで、>899,>900,>901,>902,>903,>904
の7名ということでっか?
いちおう参加。
911897:02/11/10 05:07
人が多けりゃ、ローカルコテハン付けた方が良いと思う。
トリップ付けたきゃつけてね。
912897:02/11/10 05:07
はい8名
いや、ANSI以前はまじで
x;
と書くと宣言になったらしい。
http://www.et.brad.ac.uk/help/.packlangtool/.langs/.c/.ansi.html
の2 Integerのとこ。
9.
質問に質問で返していくとだんだんわけがわからなくなってきますね。
本当だ・・・x; って書いてある・・・
>>913
ということは、
int a,b;
a=b;
b;

なんて書くとbが先頭で宣言されてねーぞゴルァ!と言われたわけか
917ラーメン:02/11/10 05:09
では、漏れはラーメンと名乗る事にしよう。
918916:02/11/10 05:11
違うな。
再定義されているぞゴルァか
今日もう400くらいいってるな。
今晩はお開き?
int x; >/DL>

これはタグのミスか?
#define コテハン FALSE
#define 名無し TRUE
ななしでいいや…。
>>921
だろうな。
さて、肉饅でも食って Lisp の勉強すっか
すみません、こんな時間ですが質問させてください。

お約束の0、NULL、0x00、'\0'についてなのですが、
charやらintやらポインタやらを含む構造体を初期化するときは0x00を使い、
charの配列を初期化するときは0x00ではなく'\0'を使っていたのですが、
そもそもこの使い方は正しいでしょうか?
正しいとすると、結局この2つは等価でしょうか?
>>925
0,0x00,'\0'はみな同じ
通常は0を使い、文字の場合は'\0'を使うとみやすいと思うよ。
16進数の0x00は他の16進数と一緒に使う場合に有効かも
927925:02/11/10 05:34
>>926

えっと、キャストのない素の0があると、これがNULLポインタになって・・・・・・
(すみません、よく分かってません)
なんとなくmemsetの第2パラメータとして"値"を使うには
不適のような気がするのですが・・・・・・。
928926:02/11/10 05:34
それと、構造体はmemsetで0に初期化するよりも、メンバーごとに初期化した方がいいと思う。
NULLや0.0は全ビット0とは限らないし。
929926:02/11/10 05:35
>>927
ポインタを要求するところやポインタにキャストすると0はNULLとなる。
ただそれだけ。
930925:02/11/10 05:39
>>928

う〜む、そうなのですか。
やはり構造体ごとに初期化用の手続きを踏むのですよね?


>>929
あぁ、なんとなく分かりました。
memsetの第2パラメータはポインタを要求するところではないので、
直接0と書いても大丈夫(NULL、にはならない)、ということですよね?

キタ━━━━━(゚∀゚)━━━━━!!!

>>928
0.0は全ビット0とは限らない。
だが、NULL は全ビット 0 だ。
>>930
ふつうはNULLと書くとおもうが。
933926:02/11/10 05:40
>>930
そう。
struct KOZO{
int i;
double d;
char *p
};

struct KOZO kozo={0,0.0,NULL};と言う感じで。
934931:02/11/10 05:41
すまん、逝ってくる。
>>933
struct KOZO kozo={0,};
とかでもいいね。
936932:02/11/10 05:42
おれも逝ってくる。
第二パラメータはポインタじゃなかった。
>>930
> memsetの第2パラメータはポインタを要求するところではないので、
> 直接0と書いても大丈夫(NULL、にはならない)、ということですよね?

とは言っても、memsetで0を埋める領域に
ポインタ型や浮動小数点型が含まれている時は
ダメだよ。
938デフォルトの名無しさん:02/11/10 05:44
逝っちゃった人が 2 人いるスレはここですか?
memsetは文字配列や整数配列を0で初期化する時くらいしか使わないな。
940939:02/11/10 05:47
まあ文字配列は大抵文字列として使うから0で初期化ってのはあまりしないか。
941デフォルトの名無しさん:02/11/10 05:47
フィル値がバイト単位で無ければ、もっと使い途あったんだけどナー。
942925:02/11/10 05:47
なるほど勉強になります。
たしかに今まで浮動小数点などはほとんど扱っておりませんでした。
なんとな〜く動いていたのですね。
>>940
'\0' では初期化するだろ。
>>941
だな。
intの配列に1与えてmemset使っても1で初期化されねーもんな。当たり前だけど。
memsetで初期化そのあとdoubleとポインタを初期化。
>>943
大抵は一番最初の要素に'\0'を入れるだけ
全要素'\0'で初期化することはあまりしないな
>>939
俺は処理系依存を承知でバリバリ使ってる。
  ZeroMemory(&ofn, sizeof(ofn));
とか。(Win32)
int hoge[100] = { 1 };
void *memfil(void *dest, const void *src, size_t size, size_t count)
{
char *d = dest;
while(count)
{
memcpy(d, src, size);
d += size;
count--;
}
return dest;
}
>>947
0ならそれとかbzeroの方が速いんだったか?
>>948
それ、hoge[1] 以降は全部 0 だぞ。
int i;
for (i=0; i<n; i++)
hoge[i]=1;
953デフォルトの名無しさん:02/11/10 05:53

     次 ス レ の 予 感
954947:02/11/10 05:53
>>950
確かVC++では ZeroMemory は memsetのマクロだったはず。
>>951
??
>>951
hoge[0]だろ
>>956
????
958947:02/11/10 05:55
>>956
なんで?
959デフォルトの名無しさん:02/11/10 05:56
つーか、x86 + VC なら、ポインタも浮動小数点数も ZeroMemory() でいいじゃん。
>>948
hoge[0]だけが1になったけど、、、
>>958
なんでってCの配列の添え字は0からじゃん(笑)
962947:02/11/10 05:57
>>959
うん。だから処理系依存を承知でと書いたわけだけど。
次は配列の添え字と初期化論争ですか?
大域変数
double foo;
void *bar;
とすると、
foo == 0.0、bar == NULL
に初期化されるの?それとも全バイト 0 に初期化されるの?
memsetって高速化するためにできるだけintバイトごとに初期化していたりする?
NULLポインタが0で埋まってない処理系ってあるんだ。
>>964
=0と同じことになる。
doubleに0を入れようとすると0.0を入れようとしたことになるはず。
968947:02/11/10 05:59
>>961

>>951
> それ、hoge[1] 以降は全部 0 だぞ。
と書いてますが?

なんでそれが
> hoge[0]だろ
になるわけ?
以降の意味知ってる?
誰か次スレ立てて。
漏れ立てられない。
>>968
あー!
ごめん、なんでそんな勘違いしたんだろ(笑)
>>968
hoge が大域変数なんて書いてあったっけ?
>>967
なるほろ。じゃあ bar も NULL になる?
973947:02/11/10 06:02
>>965
intどころかもっと大きいサイズでもやってるかも。
>>971
(゚Д゚)ハァ?
>>972
そう。
>>974
(;´Д`)ハァハァ
でかい自動変数のdoubleの配列を0.0に初期化するときはループ使うのが一番てっとりばやい?
>>976
(・∀・)

>>971
968 の話とグローバル変数かどうかが何で関係あるわけ?
誰か次スレ頼むー!!

>>977
速さで言えば宣言の時に初期値指定した方が速い。
配列は全て初期化されるんじゃなかった?
>>978
968 は関係なかったね。hoge[1] 以降が 0 になるって話。
>>979
でかい配列だから無理がある。
>>980
マジ!?
誰か次スレ頼むー!!

>>981
初期値が省略された要素は 0 で埋められる事が規格で決まっている。
グローバルかローカルかは関係無い。
>>984
マジ知らなかった。スマソ
>>984
int a[1024]={78,22,-2};とやったらa[3]以降は不定だったと思うけど、、、
>>984
アセンブラ出力させたらそんなコード吐いてなかった。
スタックを確保してただけ。おれの処理系がダメなのか。
新スレは
このスレの >>1のコピペでいいか?
それよければ漏れが立ててくるが。
このスレ、過去ログ情報がないね。
989985:02/11/10 06:17
>>984
まてぃ。試しにやってみたらやっぱ初期化されてないぞ!
うそつけ!
>>988
訊という字を聞にしてほしい
あとはそのままでOK
991984:02/11/10 06:18
C99 だったカモー・・・

で、誰も次スレ立ててくれんのか?
漏れのホストでは立てられない。
いちいち初期化していたら効率が悪くなるよ。
静的変数は一度だけ領域を確保するから初期化してもあまり問題ではないけど。
俺も無理。
たてすぎだった。
994985:02/11/10 06:19
>>984
まてぃ
int hoge[100] = { 1 };
こうしたら、hoge[1] 以降は 0 に初期化されてた。
やっぱスマソ
9961:02/11/10 06:22
やっぱり3日もたなかったな。
>>995
お疲れ!!
しかし、漏れのホストずっとスレ立てられないんだけど、何でだ・・・。
同じホストで乱立ヴァカがいるのか。
   ∧∧
   /⌒ヽ)
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三
   ||
 ∧||∧
(  ⌒ ヽ トゥトゥトゥマシェーリー
 ∪ 。ノ    トゥトゥトゥマシェーリー
  ∪∪
     ∧∧  ミ _ ドスッ
     (   ,,)┌─┴┴─┐
    /   つ  終 了.  |
  〜′ /´ └─┬┬─┘
   ∪ ∪      ││ _ε3
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。