5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:02/11/07 21:55
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
おつ

4 :デフォルトの名無しさん:02/11/07 21:57
        まもなくここは 乂1000取り合戦場乂 となります。

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

http://big.freett.com/scheme_a/num1000.swf

5 :デフォルトの名無しさん:02/11/07 21:57
1 乙カレー

6 :デフォルトの名無しさん:02/11/07 21:58
<ヨンジュー>

とするのが礼儀であろう・・・。

7 :デフォルトの名無しさん:02/11/07 21:58
>>4 はえーよ

8 :デフォルトの名無しさん:02/11/07 21:59
>>1おっつかれー!

9 :デフォルトの名無しさん:02/11/07 22:01
どうでもいいけどさ、
mallocとかreallocとかの
allocってどういう意味?
辞書にものってない・・・

10 :デフォルトの名無しさん:02/11/07 22:02
allocate

11 :デフォルトの名無しさん:02/11/07 22:03
memory allocate
reallocate

12 :デフォルトの名無しさん:02/11/07 22:03
割り付けか!!
ありあとう

13 :デフォルトの名無しさん:02/11/07 22:06
all OK

14 :デフォルトの名無しさん:02/11/07 22:07
creat

15 :デフォルトの名無しさん:02/11/07 22:08
>>1
おつかれ

でもスレッドタイトルもうちょっとひねれなかったの?

16 :デフォルトの名無しさん:02/11/07 22:08
スレタイをひねる必要はない。

17 :1:02/11/07 22:09
どうせ3日で終わるんだから、どうでもいいよ。

18 :デフォルトの名無しさん:02/11/07 22:10
さて、3日ももつかな?

19 :前スレ944:02/11/07 22:12
あ。「マルチ禁止」 入れるの忘れたよ・・・。

20 :デフォルトの名無しさん:02/11/07 22:26
あげ

21 :デフォルトの名無しさん:02/11/07 22:29
C言語とは関係ないんだけど、SHIFT-JISの内字っていったい何文字あるんですか?


22 :デフォルトの名無しさん:02/11/07 22:32
なんでCと関係ない話するんですか?

23 :デフォルトの名無しさん:02/11/07 22:35
>>22
すんません。
CでSJIS⇔UNICODEの変換ツールを作る予定だったもんで。

24 :デフォルトの名無しさん:02/11/07 22:35
「内字」ってはじめて聞いた。

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");
}

どうもうまくいきません。何がわるいんでしょうか?

26 :デフォルトの名無しさん:02/11/07 22:38
>>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');
}

28 :デフォルトの名無しさん:02/11/07 22:38
(´-`).。oO(結局、>>1 に何書いても無駄なのかい。。。) >>21 >>25

29 :デフォルトの名無しさん:02/11/07 22:38
>>24
外字領域じゃないんで、「内字」でもいいんじゃないですか?

30 :デフォルトの名無しさん:02/11/07 22:40
>>29
外人の反対を内人と言わないだろ。

31 :デフォルトの名無しさん:02/11/07 22:40
内地人

32 :デフォルトの名無しさん:02/11/07 22:41
内地って本州の事だろ

33 :デフォルトの名無しさん:02/11/07 22:42
>>21
こういうレベルから全部、人にいちいち聞いて、
sjis、unicodeの変換ツールを作るつもりなのかい。
すげーな。

34 :デフォルトの名無しさん:02/11/07 22:43
前スレでヘッダファイルについて質問した香具師だけど
こんなもんが出てきちゃった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???

35 :デフォルトの名無しさん:02/11/07 22:44
bcc32 list4-8.c read_line.c


36 :デフォルトの名無しさん:02/11/07 22:44
>>25
ビットが逆順で出るって事か。
if(a & (1 << (31 - i)))
だろ。

37 :デフォルトの名無しさん:02/11/07 22:44
>>33
やらなきゃいけないんで。
参考になるサイトとかあったら教えてください。

38 :デフォルトの名無しさん:02/11/07 22:45
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');
}

40 :デフォルトの名無しさん:02/11/07 22:46
>>37
WideCharToMultiByte と MultiByteToWideChar で検索しろ。

41 :デフォルトの名無しさん:02/11/07 22:46
>>35
サンクス
もしかしていちいちこれやんなきゃだめ?

42 :デフォルトの名無しさん:02/11/07 22:47
>>34
read_line.c も同時にコンパイルしる。

43 :デフォルトの名無しさん:02/11/07 22:48
>>41
CBar で検索しる。

44 :デフォルトの名無しさん:02/11/07 22:55
>>40
ありがd

45 :デフォルトの名無しさん:02/11/07 23:12
>>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
チャット&掲示版
http://www.i-chubu.ne.jp/~tomomi-h/marion/navi/navi.cgi?links=20311


50 :デフォルトの名無しさん:02/11/07 23:29
       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

(,,ノ゚д゚)ノ


51 :デフォルトの名無しさん:02/11/07 23:29
最近ようやくポインタが理解できてうれしい今日この頃ですが、
よくポインタを理解したら中級レベルと言いますが、
特定の分野に依存しないところで、
上級レベル、って言うとどんなものがあるのでしょうか?

最近いい気になってる俺を打ちのめしてください。

52 :デフォルトの名無しさん:02/11/07 23:30
while文はループの制御を制御する文で判定に使う式が真である間、ブロック・文・空文を繰り返し
実行する。無限ループを作りたい場合は条件式に0を入れれば良い。

これって正しい?

53 :デフォルトの名無しさん:02/11/07 23:31
#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);
}

されにこのマクロ終わんなくない?

54 :デフォルトの名無しさん:02/11/07 23:31
>>51
マゾでつか?

55 :デフォルトの名無しさん:02/11/07 23:31
前橋本に文句がつけられるようになる。

56 :デフォルトの名無しさん:02/11/07 23:32
条件式に1

57 :デフォルトの名無しさん:02/11/07 23:32
とりあえず、7行プログラミング板いってみ
オレはぶちのめされた
7行でオセロできてたYO!

58 :デフォルトの名無しさん:02/11/07 23:33
>>56
だよね?
これやってみ
http://village.infoweb.ne.jp/~fwnt6934/something/html/q-c3/q-c3.htm

59 :デフォルトの名無しさん:02/11/07 23:34
あれは特定の分野に依存してる・・・かな?

60 :デフォルトの名無しさん:02/11/07 23:37
常に真のループはwhile(1)よりfor(;;)がいいと思うのであります。

61 :デフォルトの名無しさん:02/11/07 23:40
>>60
なぜ?
てか>>58のサイトひどいね

62 :デフォルトの名無しさん:02/11/07 23:42
>>51void (*signal(int signum, void (*sighandler)(int)))(int);この文で宣言されている変数とその型は?

63 :60:02/11/07 23:42
>>61

whileだと少なくとも"1"を意識する必要がありますが、
for(;;)だと何も意識しないことが期待される動作につながるからであります。

64 :デフォルトの名無しさん:02/11/07 23:44
>>58
問3(2)、0 でも 1 でも正解で、2以上の数値 と -1 で不正解なのは意味不明。

>>60
最適化がかかれば 2 つに違いは無い。
最適化されない場合、for(;;) が無条件でループするのに対して while(1) は
毎回 1 を評価する。

65 :デフォルトの名無しさん:02/11/07 23:45
>>62
えーと、
signalは、返却値なしで引数intの関数へのポインタを返す関数で、
引数はintと、返却値なしで引数intの関数へのポインタの二つある!
キタ━(・∀・)━!

66 :デフォルトの名無しさん:02/11/07 23:46
>>64
0正解?
間違いだろw
Cの真と偽の定義知ってる?

67 :66:02/11/07 23:48
>>64
すまそ。問題の方ね。
ただの写し間違いとは思えないから
あのサイトの管理人がまちがってんだろ

68 :デフォルトの名無しさん:02/11/07 23:48
>>62
前橋・・・

69 :デフォルトの名無しさん:02/11/07 23:49
>>65

返り値の型がvoidなのは、返却値なしとゆーより、
返却値はどう使ってもい〜よ〜だと思っていたが、違うかな?
void *とごっちゃになってるかな?俺。

70 :デフォルトの名無しさん:02/11/07 23:50
>>69
でもvoid kansu(void)とかでreturnすると
警告でない?使えないんでない?
てかvoid*ってなんだ?

71 :デフォルトの名無しさん:02/11/07 23:51
return;
は使える。

72 :デフォルトの名無しさん:02/11/07 23:51
>>69
間違い。voidを返す関数というのは何も返さない。
使おうと思っても何も返ってこないのだから使いようがない。

73 :69:02/11/07 23:53
>>72

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

>>70
void *は何にでもキャストできる汎用型。
オブジェクト指向〜とかポリモーフィズム〜なんてので使った記憶あり。

74 :デフォルトの名無しさん:02/11/07 23:58
>>65
char array[5][5];
上記のarrayの型を引数としてarrayの型を返すような関数ポインタfuncpを定義したい。
どうすれば良いか?


75 :デフォルトの名無しさん:02/11/08 00:00
char (*funcp)(char array[5][5])[5][5];

76 :デフォルトの名無しさん:02/11/08 00:01
>>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);
ってわかる?

78 :デフォルトの名無しさん:02/11/08 00:06
>>76
されてるが…。


79 :デフォルトの名無しさん:02/11/08 00:08
>>64
俺もそう思った。0以外はみんな正解じゃん。
〜以外を入れるという問題かと思って見直しちゃったよ。もしそうなら0が正解だから。

80 :デフォルトの名無しさん:02/11/08 00:09
void *(*sighandler)(int);

81 :デフォルトの名無しさん:02/11/08 00:12
>>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。

82 :デフォルトの名無しさん:02/11/08 00:12
解答ページより
> while文はループの制御を制御する文で判定に使う式が真である間、ブロック・文・空文を繰り返し
> 実行する。無限ループを作りたい場合は条件式に"0を入れれば良い"。

ハァ?

83 :デフォルトの名無しさん:02/11/08 00:13
>>77
intをひとつ取り、値を返さない関数へのポインタsighandlerじゃないの?

84 :77:02/11/08 00:17
>>83
すまん、そーだ。

85 :デフォルトの名無しさん:02/11/08 00:20
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));

86 :84:02/11/08 00:22
漏れ 77 じゃなくて 76 だよ・・・鬱

87 :62:02/11/08 00:23
ごめん、プロトタイプだった。

こう書けばよかったね。
void (*(*signal)(int signum, void(*sighandler(int))))(int);


88 :デフォルトの名無しさん:02/11/08 00:23
>>85
二番目は関数ポインタ(?)を返す関数へのポインタと考えればいいのか?

89 :デフォルトの名無しさん:02/11/08 00:24
最後間違った!
int *(*(*(*(*ppppf)(int *(*(*(*)(int))(int))(int)))(int))(int))(int);

90 :81:02/11/08 00:26
>>88
内側から 1 コずつ typedef していけば、なんとなく分かるよ。

91 :デフォルトの名無しさん:02/11/08 00:30
s/ppppf/ppppf[10]/


92 :デフォルトの名無しさん:02/11/08 00:31
>>75は正しいのか?

93 :デフォルトの名無しさん:02/11/08 00:33
>>92
char array[][5]でいいと思う。

94 :デフォルトの名無しさん:02/11/08 00:33
しかし、関数ポインタのネストって普通しないんじゃないか?
するにしても、難読になってくる前に typedef すると思うんだけど。
85-89 みたいなコードを生で書いてる(書く方針の) 人っている?

95 :デフォルトの名無しさん:02/11/08 00:35
>>93
74 を見る限り、引数は char array[5][5] でいいだろう。

96 :デフォルトの名無しさん:02/11/08 00:35
関数へのポインタを返す関数の使い道が経験の浅い僕にはわかりません。

97 :85:02/11/08 00:39
なんだか説明が変だな。
正しくは、「上のポインタ型を返す関数(引数はint)へのポインタ」だな。
しかも間違ってるし。>>91thanks

>>94
ふつうはせいぜい関数ポインタを返す関数までだな。
それでもtypedefする。
まあ、パズルというか言葉遊びということで。

98 :デフォルトの名無しさん:02/11/08 00:41
C FAQの14.5:
2つの浮動小数点の値が"十分近い"ことを判定するよい方法は。
http://www.catnet.ne.jp/kouno/c_faq/c14.html#5
を見て思ったんですが、精度の敷居ってどういう事でしょうか?
epsilonをどのように選べばよいのかわかりません。

99 :デフォルトの名無しさん:02/11/08 00:42
>>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;
}

100 :デフォルトの名無しさん:02/11/08 00:42
必要な精度にすればいい。
0.00000001でよかったらそれでいい。

101 :デフォルトの名無しさん:02/11/08 00:44
>>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浮動小数,バイト数)


104 :751:02/11/08 00:51
ep_dash=(double)a/b-1.0
if(abs(ep_dash))...
とかは?


105 :98:02/11/08 00:51
>>100
>>101
>>103
なるほど、どういうものか大体わかりました。ありがとうございました。

106 :デフォルトの名無しさん:02/11/08 00:53
>>102
呼び出しが必要なたびに strcmp() 走らせるの?

>>103
>>98
> 浮動小数点の値が

107 :751←関係無し:02/11/08 00:53
>if(abs(ep_dash))...
if(abs(ep_dash)<0.0001)...
「104の訂正」
めちゃ解り辛いな

108 :751:02/11/08 00:58
関係無しって言うのは 
751という数字がという事だ。悪いな何度も

109 :デフォルトの名無しさん:02/11/08 01:01
max(a,b){(abs(a-b)+abs(a+b))/2}なんてあったな、そういえば。

110 :デフォルトの名無しさん:02/11/08 01:03
あったあった、で、なんでいきなりmax?

111 :デフォルトの名無しさん:02/11/08 01:07
多分このコードより三項演算子の方が速いな。

112 :デフォルトの名無しさん:02/11/08 01:16
>>99
関数テーブルって言うなら
funclist[]={Hoge,Hage,Huga};じゃね?
俺ならenum,switch使うな。
文字列比較なんてたるくてやってられね〜。


113 :デフォルトの名無しさん:02/11/08 01:18
ふむふむ
3時間で100か・・・
このペースだと3日もたない・・・

114 :デフォルトの名無しさん:02/11/08 01:20
>>109
あっ、a,bが負の場合違うでしょ、それ。
足し算の方は絶対値取らなくていいべさ。

115 :デフォルトの名無しさん:02/11/08 01:40
reallocって重いの?

116 :デフォルトの名無しさん:02/11/08 01:43
>>115
軽いとは言えないが不要な処理はしないはず。
ところで、何かと比較して言ってるの?

117 :デフォルトの名無しさん:02/11/08 01:43
重い、重くないの基準は?

118 :デフォルトの名無しさん:02/11/08 01:56
前スレで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\>

意味が不明・・・


119 :デフォルトの名無しさん:02/11/08 02:07
free
して
malloc
しなおす
のに比べて

120 :デフォルトの名無しさん:02/11/08 02:09
>>119
mallocしてコピーして元の領域をfreeの間違いか?

121 :デフォルトの名無しさん:02/11/08 02:11
>>119
全部消えちゃう

122 :デフォルトの名無しさん:02/11/08 02:11
敷居(w
元の英語はthreshold(閾値、しきい値)だね。
「これ以下なら近い」等と判断する境界値の事。
>>98
わかんなかったらとりあえず#include <float.h>して
FLT_EPSILON使ってれば?

123 :デフォルトの名無しさん:02/11/08 02:13
新たに別の場所に再確保すると言う事はreallocも元の領域はfreeしてる訳だから
関数呼び出しのオーバーヘッド位しか差は無いんじゃない?


124 :デフォルトの名無しさん:02/11/08 02:14
>>123
reallocは通常、元の領域をいじるだけだと思うんだがどうだろう?
あくまでも通常ね。

125 :124:02/11/08 02:18
VC++でやってみた。
VC++ではreallocは他の領域に取るみたいだね。他のも大抵はそうなのかな?
だとすると>>123の言うとおりだね

126 :デフォルトの名無しさん:02/11/08 02:20
実装によると思ふ。
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 そのものがおかしくないか?

128 :127:02/11/08 03:23
age ちゃった・・・。

追加。
16 ビットコンソールアプリが走ってるのも何かおかしい。
利用 OS は NT 系に設定してある?

129 :デフォルトの名無しさん:02/11/08 03:33
>>122
すんげー遅レスじゃないかや?

130 :困ったさん:02/11/08 04:14
標準入力から数行のテキストファイル(ただし2バイト文字を含まない)を
読み込んで、それに行番号をつけて標準出力の出力するプログラム、誰かお
願い!!

131 :デフォルトの名無しさん:02/11/08 04:16
それだけなら2バイト文字があっても問題ないと思うんだが。

132 :困ったさん:02/11/08 04:18
今アスキーコードならった所なんです、たぶんその関係で書かれてると
思うんですが。。。難しいことはわかりません。。

133 :デフォルトの名無しさん:02/11/08 04:19
>>130
nl -ba < file.txt


134 :困ったさん:02/11/08 04:21
??すいません。。。わかりません

135 :デフォルトの名無しさん:02/11/08 04:22
つか宿題なら宿題スレにいく


136 :デフォルトの名無しさん:02/11/08 04:22
#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
すいません。。失礼なことはわかってたんですけどこんな時間に書き込んで
もらえそうになかったんで。。

138 :136:02/11/08 04:24
こたえちゃまずかったな・・
スマソ

139 :136:02/11/08 04:25
ん?
fgetsの仕様を勘違いしたかも。
forを抜けたあとのprintfはいらないな。

140 :デフォルトの名無しさん:02/11/08 04:26
教えて君が一向に減らないな。


141 :困ったさん:02/11/08 04:27
ほんとすいません。。こんな時間に。。ほんとありがとうございますm(_ _)m


142 :136:02/11/08 04:33
行番号って0からじゃないよな・・・・
なにやってんだろ俺。

143 :デフォルトの名無しさん:02/11/08 04:48
#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;
}

144 :デフォルトの名無しさん:02/11/08 05:59
do_something:好き
DoSomething:好きだったが教えて君でこの記法を使ってくる奴が目につき嫌いになった。
doSomething:使わないが嫌いでは無い。

prefix_do_something_preposition_something_sufix


145 :デフォルトの名無しさん:02/11/08 06:08
#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
アドレスはなんで増えてるんだ?

148 :デフォルトの名無しさん:02/11/08 06:32
>>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にならないと思うんですが?







149 :デフォルトの名無しさん:02/11/08 06:32
括弧を付けた方がわかりやすいですね。
*++ptrこういう書き方はあまり好きじゃない。。^^;


150 :デフォルトの名無しさん:02/11/08 06:45
printf("adress=%p value=%d",ptr,*ptr++);は
printf("adress=%p value=%d",ptr,*ptr);
ptr++;
ではない。
関数の評価順は規格で決まっていない。
ptr++は評価した後に増やす。


151 :デフォルトの名無しさん:02/11/08 07:07
最初ptrの値は0012ff80で
printf("adress=%p value=%d",ptr,*ptr++);実行時に
adress=%pのところはptr つまり0012ff80が表示されると
思うんですがなぜ0012ff84になってるんでしょうか?

152 :デフォルトの名無しさん:02/11/08 08:40
>>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では逆順に積むのが普通なので、多くの
環境で後者のような処理になる。もちろん前者でやるのも規格上問題ないので、
「引数は後ろから順に評価される」という仮定もやっちゃだめ。


153 :デフォルトの名無しさん:02/11/08 09:44
お願いします。Cで微分をするにはどうしたらいいのでしょうか?

154 :デフォルトの名無しさん:02/11/08 10:24
>>126
遅レスだが・・・。
VC++のmalloc()系はHeapAlloc()系APIも使ってはいるが、
それは要求されたサイズが一定以上大きい場合だけだったはず。
通常はVirtualAlloc()系で確保したものを細切れにして返してくる。

malloc()系の方がHeapAlloc()系より遥かに高速だよ。

155 :118:02/11/08 10:37
ごめん。昨日の>>118だけど
MSIMEK.SYSってたぶん、CONFIGなんとかってファイルに書く奴でない?
前に猫を見てた時に、エスケープシーケンスが出来なかったから
なんか付け足した気がする・・・。ちなみにXPだす。
システムそのものがおかしいって言われたから不安になったんだけど、
誰かこのエラーの意味わかる?
分からんかったらどの板行ったらいいかな?

156 :デフォルトの名無しさん:02/11/08 11:21
>>153
微分て微分方程式?
高校のやつ?

157 :デフォルトの名無しさん:02/11/08 11:27
C++のMFCで、既に作られてるアプリケーションに新規にダイアログ(モードレス)
を作って表示させるにはどうしたらいいですか?

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



158 :デフォルトの名無しさん:02/11/08 11:57
>>157
>>1

159 :デフォルトの名無しさん:02/11/08 12:11
>>156
はい、そうです。正確には偏微分です。
こんな感じです。

fx= ∂f / ∂x

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



161 :98:02/11/08 14:10
>>122
うお、これで完璧に判りました。誤訳だったとは…。
通りで検索しても出ないし、意味も不明だし。
ありがとうございました。

162 :デフォルトの名無しさん:02/11/08 17:00
>>161
誤訳じゃなくて誤変換だろ。
そういえばぼーよー.comには定義城(定義域の間違い)ってのがあったな。OCRでも使っているのかな。

163 :デフォルトの名無しさん:02/11/08 17:15
ファイルオープンしてから、fscanf文でファイルの最後まで読みこんだあと、
もう一回ファイルの先頭から読み直すのはどうやるんですか?


164 :デフォルトの名無しさん:02/11/08 17:20
クローズしてもう一回ファイルオープンする。

165 :デフォルトの名無しさん:02/11/08 17:23
>>163
rewind()

166 :デフォルトの名無しさん:02/11/08 17:25
すみません。初心者ながら疑問があるのですが、
Visual C++でビルドしたプログラムはWin9X上で動かないって事ですか?

あと、スレの最初にかかれてる問題って何なのでしょうか?

167 :デフォルトの名無しさん:02/11/08 17:30
これらのプラットフォームは、デザイン時についてはサポートされない予定です。
この決定理由は、Microsoft Visual Studio 環境で利用できる
最先端のプラットフォーム機能の恩恵を開発者が
確実に受けられるようにするためです。
コードの実行については、Windows 98 以降の
上位オペレーティング システムでサポートされる予定です。

というところまでは探せたのですが・・・、
他の問題というのがいまいちわからずじまいで・・・。

168 :デフォルトの名無しさん:02/11/08 18:02
>>165
ありがとうございます。無事ファイルが読み込まれました!!
これでレポートがはかどります

169 :デフォルトの名無しさん:02/11/08 18:45
>>167
C/C++ の前に日本語は大丈夫?

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

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

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

で、これは C の話だと思う? 思わない?

170 :デフォルトの名無しさん:02/11/08 18:49
buf[0]-buf[3]
をintの変数に代入する場合はどのようにしたらいいのでしょうか?
int cnt = (int)buf;
と無理やりしてみたのですが、だめなようでした・・

171 :デフォルトの名無しさん:02/11/08 18:50
>>170
まず buf の宣言を見せれ。
あと、「buf[0]-buf[3]」 は buf[0] から buf[3] を減算した結果と解釈して
よろしいか?

172 :デフォルトの名無しさん:02/11/08 19:08
最近、C言語に本腰を入れてやって見ようとやり始めた者です。
とある本を参照しながら勉強してるんですが、
いままで関数は main関数内で宣言してたんですが,なぜか違う演習だとヘッダ部分で関数を宣言してるんです。
この違いはいったい何なんですか?

173 :デフォルトの名無しさん:02/11/08 19:12
>>172

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

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

174 :デフォルトの名無しさん:02/11/08 19:15
>>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;
}

176 :デフォルトの名無しさん:02/11/08 19:18
>>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;
}

の違いを知りたいんです。

179 :デフォルトの名無しさん:02/11/08 19:22
>コンパイルの精度
って具体的に何?

180 :デフォルトの名無しさん:02/11/08 19:25
精度は違うだろ。速度だろ。


・・・角度かも知れないけど。

181 :デフォルトの名無しさん:02/11/08 19:25
>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では、そもそも「非標準の拡張機能」らしいので知らん

182 :デフォルトの名無しさん:02/11/08 19:26
ま、とりあえず人に物教えるときに脳内言語は使うなと

183 :デフォルトの名無しさん:02/11/08 19:27
>>178
175 のソースは C じゃできない。C++。
(もしかしたら実際にコンパイル通るかも知れないけどそれはコンパイラ独自の拡張機能)
C では 178 の書き方しかあり得ない。

184 :デフォルトの名無しさん:02/11/08 19:28
>>179
宣言なしの時に戻り値や引数がint扱いになっちゃうとかじゃない?
想像だけど・・・。

185 :173:02/11/08 19:30
>>179 >>180

ん?共通で使用する関数をヘッダファイルで宣言しておけば、
複数のコンパイル単位(cソース)をまとめてコンパイルしたときに
コンパイラが人間側の関数使用時のミスを捕捉しエラーにしてくれるよね?
すなわち「コンパイルが通ったときのPGの完成度」が上がるわけで、
これを「コンパイルの精度」と言ったのだが?


186 :デフォルトの名無しさん:02/11/08 19:32
>>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試食版ではコンパイルできたんですが。

189 :デフォルトの名無しさん:02/11/08 19:38
>>188
関数へのポインタの簡易記述のような気がしてきた今日この頃。

190 :デフォルトの名無しさん:02/11/08 19:39
>>189
(゚Д゚)ハァ?

191 :デフォルトの名無しさん:02/11/08 19:41
#include <stdio.h>

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

192 :デフォルトの名無しさん:02/11/08 19:41
>>188
> (もしかしたら実際にコンパイル通るかも知れないけどそれはコンパイラ独自の拡張機能)

193 :デフォルトの名無しさん:02/11/08 19:46
>185
まぁそれをコンパイルの精度と呼ぶのかどうかは別として〜だ。
たしかにそれを追求していったのが最近の言語の流れだろうな。

でもそれって精度って言うのか?よく分からん。俺が馬鹿なだけか?

194 :デフォルトの名無しさん:02/11/08 19:47
>>191
インナー関数は C++ でも書けない。

195 :デフォルトの名無しさん:02/11/08 19:49
>>185
「コンパイルの精度」 なんて言われたら普通コンパイラの挙動が正確かどうか
という事を思い浮かべるぞ。
オレ語は使うな。
173 の文脈じゃあ 185 の内容は普通考えつかない。

196 :デフォルトの名無しさん:02/11/08 19:50
>>191
つーか括弧の対応が取れてない。

197 :デフォルトの名無しさん:02/11/08 19:51
>>183
うーん、ほんとにCではだめで独自拡張にあたるんだろうか。

関数宣言も変数宣言も宣言の一種であって、ブロックの先頭ではそのブロック内
スコープとなる宣言ができるから、Cでも問題ないような気がするんだけど、
私が規格を読みきれていない可能性もあるので、今一つ自信がない。
>>183では断言してるから、 きっと根拠があるんだろうけど…。


198 :デフォルトの名無しさん:02/11/08 19:53
>>191
括弧の対応が取れていないが、一番最後の括弧が余計だとすると、これは
ANSI以前の古いプロトタイプ宣言なのでは?


199 :デフォルトの名無しさん:02/11/08 19:54
>>193
オレはなんとなくはわかった。
というか、共通ヘッダファイルの役割から、
推測しちゃったのかもしれんけど。

少なくとも >>172 に対して使う言葉じゃねーな。

200 :172:02/11/08 20:01
もしかして、僕が使ってる本ってダメダメ?w

201 :デフォルトの名無しさん:02/11/08 20:04
k&rでもやってるからなあ。

202 :197: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でも文法的な問題はないと思うんだけど…。


203 :デフォルトの名無しさん:02/11/08 20:05
>>177に答えてくれーーー

204 :デフォルトの名無しさん:02/11/08 20:06
前橋本もってないんであれだが、
mallocのエラーチェックをする関数を作って使えとか、そんなんじゃない?

205 :デフォルトの名無しさん:02/11/08 20:11
>>204

Cの場合結局エラーチェックをする関数からのエラーも見なきゃならんわけで……
(いきなりassertとかじゃないね?)
どっちかって言うとcallocの簡易版みたいな奴とかmallocとreallocを統合した版かなぁ
とか思いました。違うかな?

206 :デフォルトの名無しさん:02/11/08 20:13
エラーだしてexitして終わる。

207 :デフォルトの名無しさん:02/11/08 20:17
つか、どういうのを「皮をかぶせて」と呼ぶのかを知りたいんじゃない?
malloc()を元にして、例えば
void *d_malloc(size_t size)
{
void *p;
if ((p = malloc(size)) == NULL) { printf("もうダメぽ\n"); exit(1); }
return p;
}
こんなのを作ったりすること、でいいのかな?
ここで、d_malloc()はmalloc()のラッパー関数だとか言うよね?


208 :デフォルトの名無しさん:02/11/08 20:22
>197
cl -W4をつけると、
>warning C4210: 非標準の拡張機能が使用されています : 関数にはファイル スコー
>プが与えられています。
ってちゃんと指摘してくれる。

209 :デフォルトの名無しさん:02/11/08 20:24
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;
}

210 :デフォルトの名無しさん:02/11/08 20:31
>>208
それは標準なのか?

211 :197:02/11/08 20:32
>>208
なるほど。実際に警告がでるんですな。
gccだと-Wall -pedanticでも何も出ないけど、まあgccも絶対ってわけじゃないしな。
サンクス。


212 :デフォルトの名無しさん:02/11/08 20:33
>>209
関数の中で#include使ったらマズーではない?


213 :デフォルトの名無しさん:02/11/08 20:34
>>209
ネタだろ。

214 :183:02/11/08 20:43
漏れが必死に関数ないプロトタイプの可否を C99 規格書で検索中。
でももしかしたら可かも知れない。
ANSI 規格書持ってる人居ない?

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

215 :デフォルトの名無しさん:02/11/08 20:49
1.足し算関数を作成しなさい

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

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



216 :177:02/11/08 20:49
>>207
そうです!ありがとう!

217 :215: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));
}
}
なんとかここまでできたんですけど、どなたか助けていただけませんか?

218 :デフォルトの名無しさん:02/11/08 20:51
ていうか、できる・できないは別としてなるべく分かりやすく書くスタンスは
堅持してくださいお願いします。

219 :デフォルトの名無しさん:02/11/08 20:52
>>214
いや、#include自体はソースのどこにあっても問題はないんだけど、
そのヘッダファイルの中身が問題で。
もしヘッダでinline関数の定義とかがあったらアウトですよ。
(Linuxなんかじゃ実際多用してるし)


220 :デフォルトの名無しさん:02/11/08 20:53
>>215 >>217
1 を見てから書いたか?

221 :214:02/11/08 20:54
>>219
ああどうも、そういう意味ね。了解。 

222 :215:02/11/08 21:00
>>220
すんませんでした。逝ってきます。

223 :197:02/11/08 21:06
>>214
ANSIじゃなくてJIS X3010の文面だけど、見つけたよ!
やっぱり規格の読みが足りなかったか。

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

関数内でexternでプロトタイプ宣言をやることはあるから、文法的にいけると
思ってたんだけど、こんなところに例外があったとはね。勉強になった。


224 :197:02/11/08 21:12
ん、まてよ。
『明示的な』記憶域クラス指定子をもってはならない、ということは、
たとえば関数の中でstatic関数のプロトタイプ宣言をやるのはだめだが、
>>175は記憶域クラスは指定されてないから、可ということにならないか?
こうなるとANSIの原文を参照したくなるが…(持ってないけど)。


225 :デフォルトの名無しさん:02/11/08 21:13
やべー大発見!
a=a/2と
a/=2って同じだよね!?

226 :デフォルトの名無しさん:02/11/08 21:16
>>225
字面が違います。
やってることは同じです。
ちなみに
a>>=1
も(ある条件を満たせば)同じ意味になりますが、こういう書き方はやめましょう。

227 :デフォルトの名無しさん:02/11/08 21:16
void foo( int *a, int *b ) {
int tmp=*a;*a=*a/*b;*b=tmp;
}

228 :デフォルトの名無しさん:02/11/08 21:18
Cを始めて間もないのですが、コンパイラのLSI-C試食版てのを
使ってあるソースコードをコンパイルしようとしたら

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

と出てコンパイルできないのですがどうすればよいですか?

229 :デフォルトの名無しさん:02/11/08 21:19
>>228
日本語の勉強をしてください

230 :デフォルトの名無しさん:02/11/08 21:21
>>226
字面は違う?あたりまえじゃん
やってることは同じだべ?
じゃあさ、a=a/2ってとこをa/=2って変えたら
バグ起きる場合ってある?

231 :デフォルトの名無しさん:02/11/08 21:22
>>230
つうか、ふつうに C の文法なんだが...
知らなかったのか?

232 :225:02/11/08 21:24
>>231
いいから答えてくれ!
230に!

233 :デフォルトの名無しさん:02/11/08 21:26
>>230

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

234 :デフォルトの名無しさん:02/11/08 21:27
c=a=a/2;

c=a/=2;
にはできなったとおもいます。

235 :デフォルトの名無しさん:02/11/08 21:28
>>なのだが俺は分かりやすいほうがいいと思うので a = a / 2 派。
プ(w

236 :デフォルトの名無しさん:02/11/08 21:28
>>234
日本語喋れやザルが

237 :デフォルトの名無しさん:02/11/08 21:29
7゚{vv

238 :225: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;
  }
  

239 :225: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);
}


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

a=a/2をa/=2に変えると、おかしな結果になる!
なんで!!!すごくない!?

241 :デフォルトの名無しさん:02/11/08 21:33
>なのだが俺は分かりやすいほうがいいと思うので a = a / 2 派。

こいつは ++i と書かずに i = i + 1 とか書いてるのか?

242 :デフォルトの名無しさん:02/11/08 21:33
>>240
ならないが

243 :225:02/11/08 21:34
( ̄□ ̄;)!!
オレはなるぞおおお
なんでだああああ

244 :デフォルトの名無しさん:02/11/08 21:37
>>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++; }

246 :デフォルトの名無しさん:02/11/08 21:38
i = i + 1 と対比されるのは i += 1 であって、++i ではないような・・・・・・。

247 :デフォルトの名無しさん:02/11/08 21:40
>>245
(゚Д゚)ハァ?

248 :225:02/11/08 21:49
>>244
マジでそれだけ変えた!まじまじ!
XPでBCCで、CPad使ってるYO!

249 :デフォルトの名無しさん:02/11/08 21:53
>>248
全く変わりませんが

250 :デフォルトの名無しさん:02/11/08 21:54
しょーもないネタだったな
次はもっと面白いのにしてね>>248

251 :デフォルトの名無しさん:02/11/08 22:17
まずは、具体的な結果の比較を出すのが先であろう。

252 :デフォルトの名無しさん:02/11/08 22:26
gcc on x86 だと最適化の有無によって結果が変わるね

253 :デフォルトの名無しさん:02/11/08 22:31
char str[] = "ahoahoahoahoaho";この中から、すべての a を削除するルーチンを教えてください。ちなみに、2時間前にC言語の勉強はじめたとこです。

254 :デフォルトの名無しさん:02/11/08 22:32
>>253
char *foo (void) {
static char s[] = "hohohohoho";
return s;
}

255 :デフォルトの名無しさん:02/11/08 22:34
>>253
とりあえず、入門書を一冊読んで、理解してから質問してください。

256 :253: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));
}

258 :デフォルトの名無しさん:02/11/08 22:39
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;
}


259 :225: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;
}

262 :デフォルトの名無しさん:02/11/08 22:43
>>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++);
}

264 :253: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とかが起こってんのかなあ.

269 :デフォルトの名無しさん:02/11/08 23:05
>>268
>>248

270 :デフォルトの名無しさん:02/11/08 23:07
>269
なるほど.

271 :266: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]の値はちゃんと保存されてるのか?

274 :デフォルトの名無しさん:02/11/08 23:29
>238
アハハハ、やっちゃったね。

275 :デフォルトの名無しさん:02/11/08 23:31
>>273
いくら払えばいいんですか?

276 :デフォルトの名無しさん:02/11/08 23:32
どばーっと。

277 :デフォルトの名無しさん:02/11/08 23:45
一匹でいいや

278 :225:02/11/08 23:47
>>273
どういう事?
sizeの宣言ってdata[99]の99のこと?
でも1から100までだから、配列のサイズは99でしょ?

てか実際変えてるのはa=a/2のとこだけだから、
そこは関係ないと思う。
最もプログラムの本質に関わることだったらあれだけど・・・

279 :デフォルトの名無しさん:02/11/08 23:51
>>278
何を言っているのか要領を得ないが、data[99] と宣言したら、使えるのは
data[0] 〜 data[98] だぞ。

280 :デフォルトの名無しさん:02/11/08 23:55
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
サイズは10。

281 :デフォルトの名無しさん:02/11/08 23:58
>>279
何言っているのか要領を得ないが、わかるようにはっきり言ったらどうだ?

282 :デフォルトの名無しさん:02/11/09 00:00
>>281
十分はっきりしてるじゃねーか

283 :172:02/11/09 00:02
記憶クラス(staticとかexternとか)について誰かわかりやすく教えてくれませんか?
手元の本を読んでもチンプン・カンプンなんで…

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

勉強し始めて一週間とちょいぐらいのレベルです。

284 :デフォルトの名無しさん:02/11/09 00:03
>>281
何言っているのか要領を得ないが、何がわからないのかはっきり言ったらどうだ?

285 :デフォルトの名無しさん:02/11/09 00:04
>>283
まず、static の何がわからないか、extern の何がわからないか書いてくれ。

286 :デフォルトの名無しさん:02/11/09 00:05
>>225
つまらん
ログ流すな

287 :デフォルトの名無しさん:02/11/09 00:05
このスレ、なんで週末になるとレベルが低くなるの?

int *p = data-1;

288 :デフォルトの名無しさん:02/11/09 00:05
>>284
十分はっきりしてるじゃねーか

289 :デフォルトの名無しさん:02/11/09 00:07
>>287

290 :デフォルトの名無しさん:02/11/09 00:09
>>287
十分はっきりしてるじゃねーか

291 :172:02/11/09 00:11
>>285
何がわからないのか…う〜ん

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

こんなんじゃだめですか?(抽象的でごめんなさいマジで…)

292 :デフォルトの名無しさん:02/11/09 00:12
よくいるよ。強い口調で言ってみたものの自分が間違っていることに気づいたが
後に引けない>>279みたいなやつ。


293 :172:02/11/09 00:12
>>291
外部関数 → 外部変数

です、間違えた

294 :デフォルトの名無しさん:02/11/09 00:13
>>292
>>279のどこが間違ってるの?

295 :デフォルトの名無しさん:02/11/09 00:21
>>294
コピペだから気にするな

296 :デフォルトの名無しさん:02/11/09 00:21
>>294
お願いだから相手にしないでよ。

297 :デフォルトの名無しさん:02/11/09 00:27
>>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 → 外部モジュールで参照可

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

グローバル変数だらけのソースは一般に嫌われる。
(何がどこで使われてるかわかったものじゃないから)

300 :デフォルトの名無しさん:02/11/09 00:30
300

301 :デフォルトの名無しさん:02/11/09 00:32
Σ(゚д゚lll)ガーン

302 :デフォルトの名無しさん:02/11/09 00:33
>>298
> extern → 外部モジュールで参照可

それは微妙に違くないか?

303 :デフォルトの名無しさん:02/11/09 00:36
extern → 外部モジュールのを参照可に?

304 :172:02/11/09 00:41
>>297-299
ありがとうございます!

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

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

ほんとありがとうございます。勉強しはじめなんで一気に飲み込むのは僕には無理があるようで、これから徐々に消化していきたいと思います。
でも、おかげさまでアバウトな面での認識はできました。

305 :デフォルトの名無しさん:02/11/09 00:46
>>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;
}

こんな感じ。

306 :デフォルトの名無しさん:02/11/09 00:47
>>303
それが妥当な説明だね。簡単に言うなら。

307 :デフォルトの名無しさん:02/11/09 00:51
>>273
1から100までなのに配列のサイズが99っておかしくねぇ?
おまえの理論は、1〜N個のデータはN-1個の配列に格納できるっつーことだぞ。
つまり、N=2とすると、1個の配列に格納できるって話になっちまうぞ。
もう一度よく考えれ。

308 :デフォルトの名無しさん:02/11/09 00:56
>>304
 staticは関数の宣言に使用した場合と変数の宣言に使用した場合で
意味が異なる。
 static func() と使った場合はそのファイル内ローカルの関数になる。
 また関数内で static int a;と変数を宣言した場合はauto変数でなく
 静的に(スタック上でなくメモリ上に)確保される。
 つまり関数外でstaticなしで宣言したことと同じになる。

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

 どうだい、これでますますよくわかっただろう(w

309 :デフォルトの名無しさん:02/11/09 01:01
>つまり関数外でstaticなしで宣言したことと同じになる。
リンケージは?

310 :デフォルトの名無しさん:02/11/09 01:01
>>308
罠張るなよ。
グローバルの static 変数はどうなるんだ。
あと大抵の入門者は auto なんてキーワード知らんから持ち出すな。

311 :デフォルトの名無しさん:02/11/09 01:04
>>307
何故それを 273 に向かって言う?
つーか、多分 「1 〜 100」 はループカウンタを言っていると思われ。
実際には N - 1 でアクセスしてる。

・・・それでも後ろに 1 つはみ出るけどナー。

312 :172:02/11/09 01:04
(^^;
もちっと勉強してから、でなおしてきますぜぃ!

あ、でも使用用途が判らなかったから悩んでたんでそこらへんは解決しました!
あとは勉強して自然と身につけるのみですよね

313 :デフォルトの名無しさん:02/11/09 01:06
>>312
どうでもいいが、新たに質問したら、名前はそこの番号に変えた方がいいぞ。

314 :デフォルトの名無しさん:02/11/09 01:10
>>309
 それは書いた後で気がついた

315 :デフォルトの名無しさん:02/11/09 01:16
知識ひけらかしたいのかもしらんが、無駄にレスが多くなるような回答はやめようべ。
ただでさえ流れるの早いんだから。

316 :デフォルトの名無しさん:02/11/09 01:26
>>315
309 や 310 や 311 みたいな突っ込みもいかんのか?

317 :225:02/11/09 01:49
1から100までって99個でないのか?

318 :デフォルトの名無しさん:02/11/09 01:53
>>317
1から10まで9個か?

319 :デフォルトの名無しさん:02/11/09 01:53
>>317
だから配列のインデックスは98が最高なんだから99にアクセスしたらまずいだろって。
もうこの話引っ張るのやめてくれよ。

320 :225:02/11/09 02:08
死んできます。
探さないでください。

321 :デフォルトの名無しさん:02/11/09 02:32
CでRS232Cに入出力するためにはどうしたらいいですか?
開発環境:Windows
コンパイラ:VC++かCygwin

322 :デフォルトの名無しさん:02/11/09 02:34
from >>1
C 標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。

323 :デフォルトの名無しさん:02/11/09 02:46
>>322
開発環境依存ですか。ありがとうございます。

324 :デフォルトの名無しさん:02/11/09 02:52
キーボードから入力とかディスプレイに出力ってのも環境依存だな。
大抵は標準入出力を使ってやりとりすれば出来ると思うけど。

325 :デフォルトの名無しさん:02/11/09 03:01
週末にこの寂れ様・・・

326 :デフォルトの名無しさん:02/11/09 03:24
>> 325
厨がわいてた方がいいと言うのか?

327 :デフォルトの名無しさん:02/11/09 03:29
しかしこのスレ回転速いな・・・。

328 :デフォルトの名無しさん:02/11/09 07:40
>>327

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

という事でよろしいか?

329 :デフォルトの名無しさん:02/11/09 07:43
1kHz じゃ、まだまだだな。

330 :328:02/11/09 08:40
   ||
 ∧||∧
(  ⌒ ヽ トゥトゥトゥマシェーリー
 ∪ 。ノ    トゥトゥトゥマシェーリー
  ∪∪

331 :デフォルトの名無しさん:02/11/09 08:51

     ||
   ∧||∧
  (  ⌒ ヽ>>328
   ∪  ノ
   ∩∪∩
   (・∀・| | クヨクヨスンナ
    |     |
  ⊂⊂____ノ
       彡
________

332 :デフォルトの名無しさん:02/11/09 09:20
首絞めてる首絞めてる

333 :デフォルトの名無しさん:02/11/09 11:04
>>329
おまいは回転速度をHzで数えるのか。
普通rpmだろう。

334 :デフォルトの名無しさん:02/11/09 11:05
周波数≠回転速度

335 :デフォルトの名無しさん:02/11/09 11:06
328 は 60,000 rpm か?
並みの HDD よりは速そうだな

336 :デフォルトの名無しさん:02/11/09 11:43
gMyLovelyHoge
mMyLovelyHoge
などの変数名で、g や m についてだけd、g はglobalでわかるけど、mはなに?

337 :デフォルトの名無しさん:02/11/09 11:51
strncpyとmemcpyってどうちがうの?
規格見たらほとんどいっしょだよ。
でもmemcpyは仮引数が*void型だけど。
結局何が違うの?
strはstringだよね?
memってもしかしてmemory?
てことはmalloc系?
よくわからん・・・
質問責めでごめん

338 :デフォルトの名無しさん:02/11/09 11:53
おい!void main(void)はなにがいけないんだ。
俺は昔っからこう書いてるんだが
最近はみんな返り値intにしてるらしいじゃねか。


339 :デフォルトの名無しさん:02/11/09 11:54
>>338
別にいけなくはないだろ
コンパイラのワー人グがうざけりゃintかえしとけ

340 :デフォルトの名無しさん:02/11/09 12:05
>>338
だってint型を返すんだもん。
ちゃんとreturn EXIT_SUCCESとかすれば?

341 :デフォルトの名無しさん:02/11/09 12:07
混乱してきました。
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'があるときの動作が違う。

344 :デフォルトの名無しさん:02/11/09 12:55
>>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]);
}


346 :デフォルトの名無しさん:02/11/09 14:36
>>344
だから、strが増加するってどういうこと?

347 :デフォルトの名無しさん:02/11/09 14:39
str++はstrが次の要素を指すようにする。

348 :デフォルトの名無しさん:02/11/09 14:50
*str++ってさす先のものを1増やすんだ?
でstr++が次の要素をさすんだ?

349 :デフォルトの名無しさん:02/11/09 14:55
>>348
違うよ。
*str++ は *(str++) と同じ。 (*str)++ ではない。

350 :デフォルトの名無しさん:02/11/09 15:00
そうだった!
*より増分演算子の方が優先度たかいんだったね。
三区す

351 :デフォルトの名無しさん:02/11/09 15:01
#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++; 配列名は演算不可

353 :デフォルトの名無しさん:02/11/09 15:04
*vc++;
アドレスを変えられるのはポインタだけ

354 :デフォルトの名無しさん:02/11/09 15:05
そうなのか・・・。
オレの認識だと、配列はポインタにすぐ読み替えられるって書いてあったから、
こんなのもありだと思ってたんだけど

355 :デフォルトの名無しさん:02/11/09 15:05
*(vc + 1); なら可

356 :デフォルトの名無しさん:02/11/09 15:06
>>348
具体例を挙げて説明すると

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

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

357 :デフォルトの名無しさん:02/11/09 15:06
#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 )

358 :デフォルトの名無しさん:02/11/09 15:07
>>354c faq 6.2

359 :デフォルトの名無しさん:02/11/09 15:09
>>357
*v++->v++;


360 :デフォルトの名無しさん:02/11/09 15:10
(*v)++; では?

361 :デフォルトの名無しさん:02/11/09 15:10
>>358
サンクス!宣言の時は違うってことかな・・・


362 :デフォルトの名無しさん:02/11/09 15:10
>>357
*v の値は参照する必要ないでしょ。
アドレスを加算させるだけだから、v++; でおk

363 :デフォルトの名無しさん:02/11/09 15:11
>>362
6.3も読め。


364 :デフォルトの名無しさん:02/11/09 15:14
>>359
ほんとだ・・

ちょっと待ってよ。
*v++は*(v++)と等価だから、「vをインクリメントした先にあるもの」だよね?
v++は「vをインクリメント」で、vってのはつまり配列?
あーわかんねー。*v++はなんでだめなの?

365 :デフォルトの名無しさん:02/11/09 15:16
v++;アドレス演算という言葉を出せば良い

366 :デフォルトの名無しさん:02/11/09 15:17
vはアドレスか!そうだね。v=&vc[0]で宣言してるってこと?
vをインクリメントすると、アドレスが増える。
たしかT型へのポインタだとして、T型のサイズ分だけ増えるんだよね?


367 :デフォルトの名無しさん:02/11/09 15:18
>>365
アドレス演算ってポインタ演算のこと?

368 :デフォルトの名無しさん:02/11/09 15:18
>>364

>>356は読んだか?

369 :デフォルトの名無しさん:02/11/09 15:19
http://alink3.uic.to/user/ranran2.html

370 :デフォルトの名無しさん:02/11/09 15:20
こんな昼間から飛んでしもたやんけ

371 :デフォルトの名無しさん:02/11/09 15:22
vはintのポインタ型の変数。
v++はvと言う値をインクリメントすると言う事。
*(v++)は*v++と同じ。
*v++は評価結果として*vを返し、v++を行う。
この文脈では*vを返す必要は無いのでv++でok.


372 :デフォルトの名無しさん:02/11/09 15:22
>>368
読んだよ!でもいまいち分かってないかな?
配列とポインタが別物ってのは分かった。3つの場合を除いてね。


373 :デフォルトの名無しさん:02/11/09 15:25
>>371
返すってことは例えばchar buf[256]があって
bufにvcの文字列をコピルときとかbuf[i]=*vc++;
ってやんのはおk?


374 :デフォルトの名無しさん:02/11/09 15:26
>>373
まず、日本語がだm

375 :デフォルトの名無しさん:02/11/09 15:28
要するに、*vc++でも問題はないんだ?
でもこの場合は別に*vを返す必要なんてないから
vc++にしろってコンパイラが言ってるってこと?

376 :デフォルトの名無しさん:02/11/09 15:29
>>375
そう解釈していい。

377 :デフォルトの名無しさん:02/11/09 15:30
>>373
ok.
俺は分かり易さを考えるとあんまり使わないが。
そんな文が必要になる時は大概for文中でインクリメントする。


378 :デフォルトの名無しさん:02/11/09 15:32
みんなありがとう!ちょっと分かった気がするYO!

379 :デフォルトの名無しさん:02/11/09 17:59
>>377
なにを偉そうに

380 :デフォルトの名無しさん:02/11/09 18:10
>>350
*と++(後置)は優先順位は同じはず。
ただ右から結合するから++が先に実行される。

381 :デフォルトの名無しさん:02/11/09 18:13
math.hのexpの実装ってどこを見ればわかりますか?

382 :デフォルトの名無しさん:02/11/09 18:14
だから環境書けって。

383 :デフォルトの名無しさん:02/11/09 18:18
すいません。solaris7のgcc 2.95.1です。

384 :デフォルトの名無しさん:02/11/09 18:37
>>380
それはK&Rでない?
規格だと*と++(後置)は++の方が優先順位は高い。
ただし++(前置)は*と優先順位が等しい


385 :デフォルトの名無しさん:02/11/09 18:45
glibはアセンブラだな<expe^x = 2^(x * log2(e))なんて変換して計算してる。

386 :デフォルトの名無しさん:02/11/09 18:50
>>380 >>384
優先順位が同じだろうが、後置の方が高かろうが、
単項演算子の結合規則は右から左なので同じ結果になる。

387 :デフォルトの名無しさん:02/11/09 18:53
つーか必要ないなら式の中で副作用を伴うものを使うなよ。
buf[i]=*vc++; みたいに。


388 :デフォルトの名無しさん:02/11/09 18:57
初心者ですが、質問です。
1.dat
2.dat


とデータファイルがあって、2番目のデータを読み込みたいとき
n=2; "n.dat"
とすると、エラーが出るのですが
一般的にはどんな方法がありますか?

389 :デフォルトの名無しさん:02/11/09 19:01
>>388
具体的なエラーとかでもちゃんと書いてみたら(w

390 :デフォルトの名無しさん:02/11/09 19:04
>>384
ソースきぼん

391 :388:02/11/09 19:05
>>389
こたえる気がないくせに茶化さないでください。
あなたみたいなのがいるから2チャンネルはだめだといわれるんです。
ほかの方、よろしくお願いします。

392 :デフォルトの名無しさん:02/11/09 19:06
>>386
> 単項演算子の結合規則は右から左なので

ハァ?

393 :!389:02/11/09 19:09
まともに答える気が出なくなるような質問の仕方をする方がどうかと思うが。


394 :386:02/11/09 19:12
>>392
   ∧∧
   /⌒ヽ)   右から左は前置だけだね・・・。
  i三 ∪   すまん。逝ってくる
 ○三 |
  (/~∪
  三三
 三三
三三

395 :デフォルトの名無しさん:02/11/09 19:16
>>388
一般的にはファイルをオープンして一行目のデータを読み飛ばして二行目を読んでファイルをクローズします。
コードはプログラミング言語を勉強して自分で努力して書いてください。

396 :383:02/11/09 19:16
>>385
なるほど。
そうなるとlogはどうなってるのかとか2^xはどうなってるのか、と気になってしまいます。
標準ライブラリのソースコードはないのでしょうか?

397 :デフォルトの名無しさん:02/11/09 19:17
++a; ←これが前置で、
a++; ←これが後置だよね?

398 :デフォルトの名無しさん:02/11/09 19:17
sprintf(buf, "%d.dat", n);
fopen(buf, "r");

399 :デフォルトの名無しさん:02/11/09 19:18
388は何がしたいのかよくわからんぞ。
391は釣り師のような気がするが。

400 :デフォルトの名無しさん:02/11/09 19:18
>>396
2^xが2のx乗ということなら、powを呼んでいるだけだと思うけど。。。

401 :デフォルトの名無しさん:02/11/09 19:19
>>388
こんな質問で、どこでどんなエラーが出るか分かるの思うのか?
で、多分sprintfすりゃあ解決ってことかと推理。
推理させるなヴォケ

あ、ネタか?

402 :知りたい人:02/11/09 19:20
文字のAを10進数の1、Bを2とCを3といった感じになおしたいのですが、
文字コードを使って上手くできませんかね。ちょっとした例文を求む。

403 :デフォルトの名無しさん:02/11/09 19:20
>>396
ソースコード拾ってくれば?
おいらはいつも見れるように主要ソースコードは展開させて置いてる。


404 :デフォルトの名無しさん:02/11/09 19:21
文字 - 'A' + 1

405 :デフォルトの名無しさん:02/11/09 19:23
LPARAMのポインタを引数に持つ関数に対してlongの変数を使用していました。
こんな感じ。
long abc;
func((LPARAM *)abc);

わざわざキャストする必要ありませんか?
将来性を考慮するとキャストする必要ありますか?
どっちがいい?


406 :デフォルトの名無しさん:02/11/09 19:23
char c;
int i;
i = c-'A';



407 :デフォルトの名無しさん:02/11/09 19:24
>>405
整数をポインタにキャストするのって0以外は怖いんですけど・・・

408 :デフォルトの名無しさん:02/11/09 19:26
キャスト以前にどうしてlong変数を使用しているのか聞きたい。


409 :407:02/11/09 19:27
(LPARAM)&abcの間違い?

410 :409:02/11/09 19:27
じゃなくて、
(LPARAM *)&abc

411 :デフォルトの名無しさん:02/11/09 19:28
LPARAM *abc;
func(abc);

412 :デフォルトの名無しさん:02/11/09 19:31
void *abc;


413 :デフォルトの名無しさん:02/11/09 19:48
>>405
キャストして動いてるんならそれでいいんじゃないかと。
将来性(と移植性)を考えると、longを使用するのを止めた方がいい。

414 :405: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を呼び出すにはどう記述すればよいのですか?

416 :デフォルトの名無しさん:02/11/09 20:36
>415
あんた誰?

417 :デフォルトの名無しさん:02/11/09 20:37
>>405
ウインドウメッセージの都合上いたし方ないのでは。


418 :デフォルトの名無しさん:02/11/09 20:37
>>415 当たり前です。

419 :デフォルトの名無しさん:02/11/09 20:41
>>415
言語が違う予感

420 :デフォルトの名無しさん:02/11/09 20:46
LPARAM abc;
func(&abc);

421 :デフォルトの名無しさん:02/11/09 20:47
>>419
C++です。
65.dat
70.dat
75.dat
と次々に読み込んでいくにはどう記述すればいいのでしょうか?
"n.dat"じゃ無理(当たり前)なのは分かりました。

422 :デフォルトの名無しさん:02/11/09 20:47
>>415
n=65, "n.dat"って記述したらコンパイルエラーですが何か?

423 :デフォルトの名無しさん:02/11/09 20:47
n=65;
sprintf(buf, "%d.dat", n);
fopen(buf, "r");

424 :デフォルトの名無しさん:02/11/09 20:51
>>423
知ったかぶり野郎は帰ってくれ!!!

425 :デフォルトの名無しさん:02/11/09 20:53
>>424 釣り師かっこ悪い

426 :デフォルトの名無しさん:02/11/09 20:54
>423
398のVerUp版だね(笑)


427 :デフォルトの名無しさん:02/11/09 21:01
>>426
そうだけど何が面白いの?

428 :初心者&rlo;者心初:02/11/09 21:03
マイナス(符号付き)はメモリの中ではどのように
扱われているんですか?

あと、ビット演算する時は変換文字を%uにしないと正しく出力されないのは
なぜなんでしょうか?教えて下さい。

429 :デフォルトの名無しさん:02/11/09 21:04
マイナス用のビットを持っていることもあるし
2の補数のこともある。

430 :デフォルトの名無しさん:02/11/09 21:05
>>428
"2の補数"で検索。


431 :デフォルトの名無しさん:02/11/09 21:05
>>428
初心者はrlo禁止です

432 :デフォルトの名無しさん:02/11/09 21:06
>>427
親切にnへの代入の仕方を教えている。
バカにしてるのだろうがな。

433 :同意&rlo;意同&lro;:02/11/09 21:13
>>431
同意。

rloつかうなら「日稿投」はやめてほ&rlo;いし&lro;ね。
#何気にテストw

434 :デフォルトの名無しさん:02/11/09 21:14
>>433
テスト禁‏止禁‎(w

435 :426:02/11/09 21:22
>432
違うよ。
既に解決策が398に載ってたのに見逃している421をあざ笑ったつもり。
スマソ。

436 :414:02/11/09 21:25
>>417,all
仕方がないということで宜しいでしょうか?

437 :デフォルトの名無しさん:02/11/09 21:52
long abc;
LPARAM hoge=abc;
func(&hoge);
abc=hoge;

438 :デフォルトの名無しさん:02/11/09 22:18
つーかリストビューと絡めるなら Windows Programing スレか Win32API スレに
逝ってくれ。
C じゃなくて C++ なら C++ スレに逝ってくれ。
あと C++ 使ってる香具師に fopen() を教えるな。

439 :デフォルトの名無しさん:02/11/09 22:24
C++知らなくてな。スマン。

440 :デフォルトの名無しさん:02/11/09 22:48
>>414
> 今後sizeof(LPARAM) >= sizeof(long)の条件が崩れた場合恐いんですが。

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

そうじゃなく、自前のコールバック関数を呼び出す時に一旦
LPARAM*を 経由しているだけなら、LPARAMとlongのサイズでなく、
LPARAM* と long* の違いの方が重要だと思う。

441 :414:02/11/09 22:59
>>440
>呼び出す関数がブラックボックスなら、逆( <= )だと思うが。
あれ。逆でつか?
関数側sizeof(引数)が大きければとりあえず問題ないとオモタのですが。。

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

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

442 :デフォルトの名無しさん:02/11/09 23:03
abc=(long)hoge;これくらいは要りそうだが。

443 :デフォルトの名無しさん:02/11/09 23:05
LPARAM abc;って宣言に変えた方がいいんでは?

444 :デフォルトの名無しさん:02/11/09 23:21
皆さん、ひとつ質問をさせてください。

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

で、自分が使用している環境ですと、構造体にcharの配列を持たせて、
この構造体ごと関数の引数として渡すと、関数の中でも問題なく配列として扱えるのですが、
これってどこでも使える汎用的な手段なのでしょうか?


445 :440:02/11/09 23:21
>>441
> 関数側sizeof(引数)が大きければとりあえず問題ないとオモタのですが。。

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

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

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

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

俺も皆の意見と同じく、気になるなら値を一旦LPARAM型変数に
キャストした方が安全な気がする。

446 :440:02/11/09 23:31
445で書いた
> 俺も皆の意見と同じく、気になるなら値を一旦LPARAM型変数に
> キャストした方が安全な気がする。
これは、コールバック関数用でなく、
ブラックボックスの関数に単なるパラメータとして渡す場合ね。

447 :デフォルトの名無しさん:02/11/10 00:00
>>444
それで問題無いなら問題無いです。
ただし、配列が丸ごと値渡しされるので、サイズによってはとんでもなく遅くなります。
あと、ポインタではなく値で int とかを渡した時と同様、呼び出し元の値の変更は
できません。

448 :デフォルトの名無しさん:02/11/10 00:04
>>444「どこでも使える」かどうかと言えば「使える」と言う。「どこでも使われている」かどうかと言えばちょと疑問。

449 :デフォルトの名無しさん:02/11/10 00:12
>>444
規格(ANSI)では使えることが保証されてる。

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

でもサイズを計るためにわざわざ構造体を使うくらいなら、
配列とサイズの2つのパラメータを渡した方がいい気がする。

450 :デフォルトの名無しさん:02/11/10 00:18
>>444
構造体のポインタを渡すというのが一般的。

451 :デフォルトの名無しさん:02/11/10 00:21
固定長の配列なら長さを渡す必要もないわけだが

452 :デフォルトの名無しさん:02/11/10 00:21
TRUE=非ゼロ という定義に関しての質問なのですが
hoge()という関数がBOOL値を返す場合
if ( hoge() == TRUE )
よりも
if ( hoge() )
と書いたほうが良いのでしょうか?
もしTRUE が 1 と定義されていて、BOOL値がTRUEとして1以外を
返すと実行されないと思ったので。


453 :444:02/11/10 00:22
皆さん、レスありがとうございます。
なるほど、構造体ごと渡すと重たいので構造体のポインタで渡すか、
または配列とサイズを両方パラメータとして渡す、のですか。

とりあえず今までいろいろ勉強のため書いたプログラムを、
ポインタで渡すよう修正してみます。
ありがとうございました。

454 :デフォルトの名無しさん:02/11/10 00:22
BOOL値ってナニ?

455 :452:02/11/10 00:24
Boolean(真偽値)のことです。
BOOLはVC独自の定義でした。端折ってすいません。

456 :デフォルトの名無しさん:02/11/10 00:34
>>452
普通の発想(Javaのbooleanみたいにtrueとfalseの値しか取らない)
ならif (hoge())が当然だが(でないと
if ((...(hoge() == TRUE) == TRUE) == TRUE)...) と書くはめになる)
WinのAPIは戻り値がBOOLなのに1と0と-1を返したりするからなあ…

457 :デフォルトの名無しさん:02/11/10 00:40
>>452
そう。だから、C++/C99でboolが組み込み型に導入された。

458 :452: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が言語定義)


459 :デフォルトの名無しさん:02/11/10 00:43
>>457
待った、デマは流すな。
C99 で定義されたのは、<stdbool.h> の _Bool だ。
C には結局 bool は無い。

460 :414: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);
}
(続く)

461 :デフォルトの名無しさん:02/11/10 00:44
>>456
なんか矛盾してない?
> WinのAPIは戻り値がBOOLなのに1と0と-1を返したりするからなあ

だから
if (hoge()) とか
if(hoge()!=FALSE)
と書くべきなのだが。

462 :414: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)

464 :459:02/11/10 00:45
ごめん、今確認したら、

#define bool _Bool

だって。
マクロだけどあることはあるみたいだ。

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

# GetMessageなんてのが、まさにそうですよね。

466 :デフォルトの名無しさん:02/11/10 00:46
>>463
そりゃまずいって(w
-1が返ったときはエラーなのにTRUEだと思っちゃう。

467 :デフォルトの名無しさん:02/11/10 00:46
>>459
スマソ。C99ではboolはマクロだった・・・

468 :461: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]);
}

470 :デフォルトの名無しさん:02/11/10 00:51
>>462
いったい何をやりたいんだか…
どうせ環境に思いっきり依存したことをやってるんだから、
自分の環境で動くなら良いのでは?

ちなみに、最近のCPUでは、1バイトの変数でも4バイト境界や
8バイト境界に整列させて割り付けるのはあたりまえだし、
doubleやlong longなど、一般的な環境で4バイトを超えるサイズの
データ型は色々ある。(構造体とか配列とかも…)

471 :414:02/11/10 00:51
>>469
さっきは書かなかったけど、そのケースでは漏れる事が分かってます。
てか、最初それを例に書いてて、漏れて当たり前だと気がついて書き直した。w

472 :デフォルトの名無しさん:02/11/10 00:55
つか元々真偽値の類いでは無い値も返す関数で真偽値の比較をする事が間違いでは?返り値-1とかは別の形で補足すべきだろ。

473 :デフォルトの名無しさん:02/11/10 00:57
まあ「元々」といいだしたらBOOLと言って置きながら
3通り以上の区別しなきゃならん値を返すほうが間違いなんだが。

474 :デフォルトの名無しさん:02/11/10 00:58
>>472 間違いだろうけど、存在するんだから仕方ない。

475 :445:02/11/10 00:58
>>462
> この場合、buf2に書き込みが行われる際にbuf1まで影響されないかと思ったんです。
> (もしくはその逆のbuf1に書き込もうとしたらbuf2にも影響が・・・)

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

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

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

それはメモリリークとは呼ばない。
バッファオーバーランなら分かるが。

476 :デフォルトの名無しさん:02/11/10 00:59
>>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]);
}

477 :デフォルトの名無しさん:02/11/10 01:01
>>458
それは逆だろう。
ハンドルとかポインタ返す関数の時はINVALID_HANDLEとかNULLと比較すればヨイ。
if(hoge())ならhoge()はBOOLを返すと思え。

478 :414:02/11/10 01:02
>>470
> ちなみに、最近のCPUでは、1バイトの変数でも4バイト境界や
> 8バイト境界に整列させて割り付けるのはあたりまえだし、
> doubleやlong longなど、一般的な環境で4バイトを超えるサイズの
> データ型は色々ある。(構造体とか配列とかも…)
どもです。了解しました。
つまり、メモリリーク(言葉の意味違う?)の可能性があるんですね。
>>441で書いたキャストして代入(short変数=(short)long変数)の例では
キャストで動作が保証(CPU依存?コンパイラ依存な気がする)される
ので、関数引数でキャストした場合も問題なく動くのかと期待してました。


479 :デフォルトの名無しさん:02/11/10 01:03
>>414
メモリ リークってfreeのし忘れだが

480 :デフォルトの名無しさん:02/11/10 01:03
こうしる。

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

}

>>452>>458の主旨は返り値の内容の意味がわかりやすいかどうかだから
↑みたくするなりコメントつけるなり好きにしる。

481 :445:02/11/10 01:05
> ていうか、メモリリークの危険は無いと思って良いのかな?たまたまかな?

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

呼び出し側を配列にして試してみるといい。

482 :414:02/11/10 01:07
>>475
すんません。>478書いてる間に色々レスを頂いてましたね。
完全に理解出来ました&何度も指摘して頂いてるのに勘違いしっぱなして
申し訳なかったっす。
キャストするのは止めます。
どもありがとうございました。

483 :デフォルトの名無しさん:02/11/10 01:09
>>458
そうか?
if(hoge())
が真だと、とにかくfalse/FALSE/NULL/0ではないことがひとめで分かる。

484 :414:02/11/10 01:12
ちなみに、「リーク=漏れる」という解釈で「メモリ漏れ」という意味で
発言してたのでつよ。。
バッファオーバーラン・・たしかにそうですね。
バッファオーバーフローは? オーバーランと同じかな。


485 :デフォルトの名無しさん:02/11/10 01:13
>>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の中が間違えてるっぽいんやけど。
誰か教えてください。ほんきわかんないんで。
配列とか、関数の定義は、できてる友達のと交換しても動くんで、このなかなんですけど











487 :デフォルトの名無しさん:02/11/10 01:14
>>バッファオーバーフローは? オーバーランと同じかな。
違う

488 :デフォルトの名無しさん:02/11/10 01:15
>>483
わかってないじゃん。
真だとfalse/FALSE/NULL/0以外の何であるか一目で分かってないし、
偽だとfalse/FALSE/NULL/0のどれであるかも一目で分かってない。

489 :452:02/11/10 01:15
>>477
>ハンドルとかポインタ返す関数の時はINVALID_HANDLEとかNULLと比較すればヨイ。
たしかにそうですね。すいません。

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

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

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

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

>>483
>が真だと、とにかくfalse/FALSE/NULL/0ではないことがひとめで分かる。
そういうことではなく、関数がどういうタイプの戻り値を返すのかが
わかりやすいコーディングがしたいだけです。
真であるか偽であるかは、別の話なわけで。

490 :デフォルトの名無しさん:02/11/10 01:15
>>486
スマン ワラタ

491 :デフォルトの名無しさん:02/11/10 01:15
>>483
同意。
漏れは
if(hoge())
という書き方して
if(strcmp(hoge, sage) != 0)
という書き方でこっちのほうを明示的視覚的に分かるようにしてる

492 :デフォルトの名無しさん:02/11/10 01:16
バッファオーバーラン=バッファオーバーフロー


493 :デフォルトの名無しさん:02/11/10 01:17
真偽値を返す関数は関数名を
is... とか has... とかにすればよい

494 :デフォルトの名無しさん:02/11/10 01:17
>>488
if(hoge())はそんなこと知らなくてもいい。

495 :414:02/11/10 01:19
>>487
>>492
どっちなんでしょか・・

496 :デフォルトの名無しさん:02/11/10 01:20
IsTrue/IsFalse関数(マクロ)を作ればいい。

497 :デフォルトの名無しさん:02/11/10 01:20
> ちなみに、「リーク=漏れる」という解釈で「メモリ漏れ」という意味で
> 発言してたのでつよ。。

アスキー用語辞典より
http://yougo.ascii24.com/gh/26/002659.html

498 :デフォルトの名無しさん:02/11/10 01:21
>>494
適当にやるのは良くない。

499 :492:02/11/10 01:22
>>495
つか、自分で調べろよ。俺は調べたが。


500 :デフォルトの名無しさん:02/11/10 01:22
>>498
どれか知りたいなら比較すりゃいい。

501 :452:02/11/10 01:25
すこし頭がごっちゃになってきましたが

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

ってのが、シンプルで確実なんでしょうか。


502 :デフォルトの名無しさん:02/11/10 01:26
>>489
> if (!RegisterClass(&myProg))
> return FALSE;

RegisterClassの戻り値自体が必要なのではなくて、戻り値が真か偽かがわかればよいのだから
他の情報を求めなくていいじゃないか。

503 :452:02/11/10 01:28
>2.bool値の場合は省略
trueかfalseしか返ってこないのであれば、0であることが確定している
falseと比較する。ってものありましたね。


504 :414:02/11/10 01:28
>>499
調べますた!
同じってことで理解しますた!
@IT用語辞典にて

505 :デフォルトの名無しさん:02/11/10 01:28
関数が適当な名前だと省略すると定義を調べるまでbool値だと分からない罠。

506 :デフォルトの名無しさん:02/11/10 01:29
たいてい成功したら非ゼロ、失敗ならゼロを返すんだから
if ( hoge() ) ...
if ( !hoge() )...
で十分。そうでない場合だけ個別に対応すればいい
わざわざ
if ( hoge() != NULL )...
if ( hoge() == NULL )...
なんてやるやつはDQN

507 :デフォルトの名無しさん:02/11/10 01:31
でも!=FALSEは否定の否定だから何もつけない方が却って読み易いと思う。
プログラミング作法か何かに載ってたが。


508 :デフォルトの名無しさん:02/11/10 01:31
>>506
NULLと比較している時点で、こいつのレベルが分かってしまうんだが。

509 :デフォルトの名無しさん:02/11/10 01:31
INVALID_HANDLE_VALUE だけは特殊だが、
false、FALSE、NULL は 0 である事が保証されている。
488 は何でこれらを区別したいのかわからん。

510 :デフォルトの名無しさん:02/11/10 01:32
>>508
501 を受けて書いたのですが

511 :デフォルトの名無しさん:02/11/10 01:33
!=FALSE を付けるかどうかは、完全にプログラミングスタイルに拠る。
あってもなくても、コンパイラは同じコードを吐く。
例え最適化オプションが ON になっていなくても。

512 :デフォルトの名無しさん:02/11/10 01:34


結論としてはbool型が無かったC言語が糞ということでよろしいですね。


513 :511:02/11/10 01:34
つまり、どっちでもいい。
どっちかでならなければならないというのは間違っている。

514 :デフォルトの名無しさん:02/11/10 01:36
>506
「ポインタやハンドルを返す」なら、返ってきた値捨てるなよ

515 :デフォルトの名無しさん:02/11/10 01:36
他人が見ても分かりやすいようにする方針なら!=FALSEを付けるというだけだろ。

516 :デフォルトの名無しさん:02/11/10 01:37
if((fp = fopen("hoge", "r")) == NULL)perror("test.c");



517 :デフォルトの名無しさん:02/11/10 01:37
スタイルの話ならもうやめようぜ。
元質問はTRUEと比較するとまずいのでは?って質問なんだから。

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

これで終わりなはず。

518 :デフォルトの名無しさん:02/11/10 01:38
>>514
おまえは fgets() を使ったことがないのかと

519 :デフォルトの名無しさん:02/11/10 01:39
おれとしては
#define TRUE !FALSE
とかして
if(hoge() == TRUE)とかの方が良いな。
とにかく二重否定は避けたい。


520 :デフォルトの名無しさん:02/11/10 01:39
なんだよ、うまい具合にNULL論争にチェンジさせる気かよ。

521 :デフォルトの名無しさん:02/11/10 01:39
今のコンパイラじゃ どっちも変わんないよ。
if( hoge ){}
ってやると ぱっと見 変数が ポインタか実数かわかんないじゃん。
んなことで
if( NULL != hoge ){}
支持。




522 :デフォルトの名無しさん:02/11/10 01:40
>>519
もうネタはけっこう。

523 :496:02/11/10 01:40
オレの意見はそんなに馬鹿らしいか...

524 :デフォルトの名無しさん:02/11/10 01:41
>>514
お前はstrchrの結果も必ず保存するのかと

525 :デフォルトの名無しさん:02/11/10 01:42
ネタと言えば、これは Microsoft 社きってのネタか?

IE の中止ボタンがしいたけに見えて困る
http://w3j.org/nazokb/jp4110000.html

526 :デフォルトの名無しさん:02/11/10 01:42
>>519
ワロタ

527 :デフォルトの名無しさん:02/11/10 01:43
>>522
アホ
$ grep glib.h -e "TRUE.*FALSE"
#define TRUE (!FALSE)


528 :デフォルトの名無しさん:02/11/10 01:43
>>519
hoge() が !FALSE を返してくれる保証があるならそれでもいいが。

>>523
面倒なだけだと思う。

529 :デフォルトの名無しさん:02/11/10 01:44
>>527
お前がアホ。
ネタと書かれた意味がわかってない。

530 :514:02/11/10 01:44
506を受けて書いているので、引数はないことを前提にしているのだが

531 :デフォルトの名無しさん:02/11/10 01:44
>>527
あふぉはおまえ
if ( hoge() == TRUE )
がネタだっつってんの

532 :デフォルトの名無しさん:02/11/10 01:45
>>529
いや、おまえの方がアホ。
俺の書いた意味が分かっていない。


533 :デフォルトの名無しさん:02/11/10 01:45
>>527
>>528

>>530
煽りだから気にするな、言いたい事は分かる。

534 :デフォルトの名無しさん:02/11/10 01:46
早くも 514 が負け惜しみを言い初めました

535 :デフォルトの名無しさん:02/11/10 01:47
はっきり言ってこんな事は仕事でプロジェクト組んで
やっていれば、いやでも読みやすいようにし向けられるので
どうでも良いのです。
人はそれをコーディング規約と呼びます。

536 :デフォルトの名無しさん:02/11/10 01:47
コーディングスタイルの話は心底どうでもいい。

537 :デフォルトの名無しさん:02/11/10 01:47
>>535
それには語弊があるぞ。
読みにくいように仕向けられるのコーディング規約なんか山のようにある。

538 :デフォルトの名無しさん:02/11/10 01:48
>>537
例: GN(略

539 :デフォルトの名無しさん:02/11/10 01:48
スタイルの問題だと重々承知しているのだが、
if(hoge)
で、
ifの仕様からしてhoge自体が真偽値/ポインタなら、さらに明示的に比較するのは
俺は抵抗がある。

540 :デフォルトの名無しさん:02/11/10 01:49
コーディング規約の規約を作れ。

541 :デフォルトの名無しさん:02/11/10 01:50
BOOLについて考えてみる。
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|




542 :デフォルトの名無しさん:02/11/10 01:50
ハンガリアンとかな

543 :デフォルトの名無しさん:02/11/10 01:51
スタイルの話を「そうだねー。それもいいねー。」くらいに軽く流すならいいが
決まって熱くなる奴がいるから続けたくないんだよなぁ

544 :デフォルトの名無しさん:02/11/10 01:51
>>539
C言語のifの仕様からして抵抗がある。
ifの中身は本来は真のbool型(true/falseのみ)でなければならないはずだ。
ついでにそんな所で代入できちゃいかん。

545 :デフォルトの名無しさん:02/11/10 01:52
>>543
スタイルを強制されたこと無いだろ。

546 :デフォルトの名無しさん:02/11/10 01:52
TRUEとは比較せずにFALSEと比較することで満場一致の様子
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|


547 :デフォルトの名無しさん:02/11/10 01:53
ハンガリアンは糞

548 :デフォルトの名無しさん:02/11/10 01:53
C++なら、
if(HOGE *hoge = get_hoge())
って書けるが、これは明示的に比較する形で書けない。

549 :デフォルトの名無しさん:02/11/10 01:53
>>545
愚痴はマ板逝け。

550 :デフォルトの名無しさん:02/11/10 01:54
bool型が無かったC言語が糞ということでよろしい!
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|

551 :デフォルトの名無しさん:02/11/10 01:55
しかしそれではワンパターンとの声により再び議論
    ∧_∧                       ∧_∧
    (  ´Д`)     ∧_∧              (  ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|

552 :デフォルトの名無しさん:02/11/10 01:56
週末なのに論争もなくて寂しいからって、プログラミングスタイルという伝家の宝刀を抜いちゃいかん。

553 :デフォルトの名無しさん:02/11/10 01:56
C言語のifの仕様がすべての元凶
    ∧_∧                       ∧_∧
    ( ´Д`)     ∧_∧              ( ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|

554 :デフォルトの名無しさん:02/11/10 01:56
>>544
C では、非 0 が真であると明確に定義されていますが何か?

555 :デフォルトの名無しさん:02/11/10 01:57
>>549
図星だからって誤魔化してもダメだよ。

556 :デフォルトの名無しさん:02/11/10 01:57
そのAAキモイ

557 :デフォルトの名無しさん:02/11/10 01:59
>>554
そもそも0とか非0がbool型にキャストできるのがおかしい。VBじゃあるまいし。

558 :デフォルトの名無しさん:02/11/10 02:00
bool型だってどうせ中身は0と非0だろ?

559 :デフォルトの名無しさん:02/11/10 02:01
だから何で C++ でもないのに bool の話をするんだ?
    ∧_∧                        ∧_∧
   Σ( ;´Д`)     ∧_∧            Σ(; ´Д`)     ∧_∧
   /    \   Σ(´Д`; )           /    \  Σ(´Д`; )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
|| Σ(    ;)     ~\_____ノ|  ∧_∧. ||Σ(    ;)     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|Σ(´Д`; ).  _/   ヽ          \|   Σ(´Д`; )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___Σ(    ;)      ~\_____ノ|  ∧_∧ ___Σ(    ;)      ~\_____ノ|   ∧_∧
.         _/   ヽ          \|.Σ(´Д`; ).    _/   ヽ          \| Σ(´Д`; )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|

560 :デフォルトの名無しさん:02/11/10 02:02
>>531
ちゃんと文読め。
二重否定を避けたいって書いてるだろうが。
どの話を受けて俺が書いたか考えろ。


561 :デフォルトの名無しさん:02/11/10 02:03
VB じゃあるまいし、ってあたりが根拠レスだよな。
何がおかしいと考えてるのかわからん。

562 :デフォルトの名無しさん:02/11/10 02:03
#define CMP(s1,op,s2) strcmp(s1,s2) op 0

CMP( "afo", ==, "vaka" );

563 :デフォルトの名無しさん:02/11/10 02:05
コーディング時に
気をつければいいのだが、
if文の中に関数を書くのにも多少抵抗がある。
たとえで言うのなら、
if(hoge())
では式の評価が関数一つなので問題はないが、
if((hoge() && hage())
ではhoge()の結果が偽であればhage()は実行されない。
気をつけて書けば、実行速度が良くなるのだが、
評価順序を間違えるとバグの原因になる諸刃の剣。

564 :デフォルトの名無しさん:02/11/10 02:05
>>560
ナニをいまさら...(w
あわてて glib 持ち出したのはおまえだろ?

565 :デフォルトの名無しさん:02/11/10 02:06
>>560
> if(hoge() == TRUE)とかの方が良いな。

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

第一みんな、if(hoge() == TRUE) の弊害の事を指摘してるのであって、
二重否定うんぬんの話は誰もしていない。

566 :デフォルトの名無しさん:02/11/10 02:06
>>558
仕様と実装の区別がついているか?

567 :デフォルトの名無しさん:02/11/10 02:07
さっそくスタイルについて熱くなってるわけだが

568 :デフォルトの名無しさん:02/11/10 02:07
/\ |  /|/|/|  ドドドドドドドドドドドド!!
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|     (´⌒(´⌒`)⌒`)
  |  /  /  |文|/ // /  (´⌒(´祭だ!!祭だ!!`)⌒`)
  |/  /.  _.| ̄|/|/|/    (´⌒(´∧ ∧⌒`)`)`)⌒`)
/|\/  / /  |/ /     (´⌒(´(,゚Д゚ )つ `)`)
/|    / /  /ヽ  (´⌒(´⌒  (´⌒( つ |〕 /⌒`)⌒`)
  |   | ̄|  | |ヽ/|  遅れるな!!   ( |  (⌒)`)⌒`)
  |   |  |/| |__|/.   ∧_∧ ⌒`).ドし'⌒^ミ `)⌒`)ォ
  |   |/|  |/  (´⌒(´( ´∀` )つ  ド  ∧_∧⌒`)
  |   |  |/    (´⌒(´( つ/] /    ォと( ・∀・ ) 突撃――!!
  |   |/        ( |  (⌒)`)  ォ ヽ[|⊂[] )`)
  |  /         (´ ´し'⌒^ミ `)`)ォ (⌒)  |


569 :デフォルトの名無しさん:02/11/10 02:09
>>561
じゃあVB〜は取り消すよ。
数値とbool(真偽値)は全く別の概念だろ。それを相互に変換する理由が無い。

570 :デフォルトの名無しさん:02/11/10 02:10
>>558
ほう、仕様ね。
で、C++ の話だとしても、0 や非 0 が bool 型にキャストできるのがおかしい
と思う根拠は何だ?

571 :デフォルトの名無しさん:02/11/10 02:11
#define TRUE 1
#define FALSE 0
#define !TRUE FALSE
#define !FALSE TRUE love

572 :デフォルトの名無しさん:02/11/10 02:11
>>570
別の概念だから。

573 :デフォルトの名無しさん:02/11/10 02:12
組み込みのbool型とtypedefと#defineを使ったbool型はどちらも使い勝手は変わらないと思うんだけど。

574 :デフォルトの名無しさん:02/11/10 02:12
>>569
言語仕様で、できるようになっている。
その方が便利だからだ。
(多くの CPU は 0 と非 0 を判定するのに便利に命令セットを持っている)

その仕様を否定したいなら、変換してはならない理由を示せ。

575 :デフォルトの名無しさん:02/11/10 02:13
>>570
> で、C++ の話だとしても、0 や非 0 が bool 型にキャストできるのがおかしい
> と思う根拠は何だ?

ハァ?
俺はそんなことはひとことも言っていませんが。

576 :デフォルトの名無しさん:02/11/10 02:13
==TRUEの弊害はネタもとがちゃんと推測してるし、その後の数レスで終わってる。
いまはスタイル論争だけ。

577 :デフォルトの名無しさん:02/11/10 02:14
>>486
scanfが間違い。

578 :デフォルトの名無しさん:02/11/10 02:14
>>572
別の概念だとキャストできるのがおかしいのは何故だ?
真偽値だろうが数値だろうが、データはデータだ。
変換できておかしくは無い。

579 :570:02/11/10 02:15
>>575
スマソ、なんか混乱してるYO

580 :デフォルトの名無しさん:02/11/10 02:16
もう話の焦点もぼけてぐだぐだです

581 :デフォルトの名無しさん:02/11/10 02:17
>>573
否。
組み込みの bool 型は、非 false を受けた時 必ず true と認識する点で
typedef / #define とは明確に違う。

582 :デフォルトの名無しさん:02/11/10 02:19
>>573
たとえ、
#define TRUE !FALSE
にしたとしても、
BOOL b = TRUE;
で困る。

583 :デフォルトの名無しさん:02/11/10 02:19
>>581
#define false 0
#define true (!false)

こう定義すれば非falseは必ずtrueになると思うが

584 :デフォルトの名無しさん:02/11/10 02:19
>>574
0と非0を判定するのに便利な命令セットを持っていることは
キャストできるのに便利な理由になっていない。
true/falseの実装が0/非0にすれば判定が便利になる命令ってだけだ。
よって変換できる理由は無い。ちなみに無いのもの理由を出すことは不可能。

585 :570:02/11/10 02:19
566 を指したかったの

586 :デフォルトの名無しさん:02/11/10 02:20
わかったから、とりあえず名前付けてくれ。お前ら。誰が誰だか
さっぱりだ。

587 :デフォルトの名無しさん:02/11/10 02:20
>>574
人はそれを0フラグと呼びます。

そしてOSのシステムコールではえてして
0が真となる仕様となっております。

588 :デフォルトの名無しさん:02/11/10 02:21
>>587
真とか偽の問題じゃなくて、-1(負?)がエラーってだけだろ。

589 :デフォルトの名無しさん:02/11/10 02:22
>>583
なんないでしょ

590 :570:02/11/10 02:22
>>583
true 以外にも非 false 値はあるだろ。
それを受けたらどうなるんだ?

591 :デフォルトの名無しさん:02/11/10 02:22
>>589
なんで?
!0==!0は真にならないの?

592 :デフォルトの名無しさん:02/11/10 02:22
>>578
別の概念であってもデータである以上キャストはできるが
キャストした結果意味があるとは限らない。
数値(文字コードではなく)を文字にキャストしても意味は無い。
数値を真偽値にキャストしても意味は無い。

593 :デフォルトの名無しさん:02/11/10 02:23
>>589
! を根底から覆す画期的意見だな!

594 :誰が誰だか:02/11/10 02:23
#define TRUE 1
#define FALSE 0
#define !TRUE 0
#define !FALSE 1
名前

595 :デフォルトの名無しさん:02/11/10 02:24
>>584
0 と非 0 を判定するのに便利な命令セットを持っている事に着目して、C では
0 を偽、非 0 を真として扱う仕様になった。
その偽を false、真を true にそのまま変換したいと言う要望は無視するのか?

596 :デフォルトの名無しさん:02/11/10 02:24
>>590
プログラマがtrueかfalse以外を入れようとすることまで面倒見切れるかよ。


597 :デフォルトの名無しさん:02/11/10 02:25
>>587
関係無い話を持ち出すなよ。

598 :デフォルトの名無しさん:02/11/10 02:25
>>591
!0 は 1 になる(よね?まあ、1でなくてもなにか特定0以外の数字になる)
で 3 や 5 は非false な訳だが、
true == 3
は偽になる

599 :デフォルトの名無しさん:02/11/10 02:26
>>590
面倒見てるのが bool 型だろ。

600 :デフォルトの名無しさん:02/11/10 02:26
>>598
非falseは!falseでしかない。
それ以外を入れようとすることまでは面倒見切れない。

601 :599:02/11/10 02:27
596 でした。また同じ間違い・・・

602 :デフォルトの名無しさん:02/11/10 02:27
591だが、これは困らなかったよ。

603 :デフォルトの名無しさん:02/11/10 02:27
>>595
最初っから真偽値型を作らなかったCが糞なだけ。
もし最初っから真偽値型があったのなら数値型に変換できる理由は無い。

604 :デフォルトの名無しさん:02/11/10 02:27
>>600
だから、組み込み型ならそれでもOKなんだってば

605 :デフォルトの名無しさん:02/11/10 02:27
>>599
そこまでする必要あるのか?


606 :デフォルトの名無しさん:02/11/10 02:28
&と|もな。

607 :デフォルトの名無しさん:02/11/10 02:28
             ∧         ∧               ###
            / ヽ        ./ .∧             /#####ヽ
           /   `、     /   .∧           /  ##### \
          /       ̄ ̄ ̄    ヽ          /   #####  ヽ
          l:::::::::              .l       /    #####   ヽ
         |::::::::::  -==・-    -==・-  |      |          ::::::::: :::::::|
         .|:::::::::::::::::   \___/    |      |  -・==-   -・==- :::::::::|
          ヽ:::::::::::::::::::  \/     丿      |    \___/  :: ::::::::|
          ヽ:::::::::::::::::        /       ヽ      \/    :::::::::::|
     ____>:::::::::::::::::       <_        ヽ        ::::;;;::::::::丿
    /:::::::::::::::::::::::: :::::::::          /⌒ヽ⌒、⌒、⌒、      ::::::::: :<___
    |::::::::::::;;;;;;;;;;;;;:::::::::::::::        / /ヽノヽノヽノヽノ       :::::::::::::  :::::::: :::ヽ
   |::::::::::::::::::::::::            /  /:::::::: :::::::::::::::::::::           ::::::::
         bool論争しに行こうか?             いいねぇ〜


608 :デフォルトの名無しさん:02/11/10 02:29
貼っとこう。

詭弁の特徴のガイドライン
http://ton.2ch.net/test/read.cgi/gline/1028811653/

609 :デフォルトの名無しさん:02/11/10 02:29
1:事実に対して仮定を持ち出す
「もし最初っから真偽値型があったのなら」

610 :デフォルトの名無しさん:02/11/10 02:29
             ∧         ∧               ###
            / ヽ        ./ .∧             /#####ヽ
           /   `、     /   .∧           /  ##### \
          /       ̄ ̄ ̄    ヽ          /   #####  ヽ
          l:::::::::              .l       /    #####   ヽ
         |::::::::::  -==・-    -==・-  |      |          ::::::::: :::::::|
         .|:::::::::::::::::   \___/    |      |  -・==-   -・==- :::::::::|
          ヽ:::::::::::::::::::  \/     丿      |    \___/  :: ::::::::|
          ヽ:::::::::::::::::        /       ヽ      \/    :::::::::::|
     ____>:::::::::::::::::       <_        ヽ        ::::;;;::::::::丿
    /:::::::::::::::::::::::: :::::::::          /⌒ヽ⌒、⌒、⌒、      ::::::::: :<___
    |::::::::::::;;;;;;;;;;;;;:::::::::::::::        / /ヽノヽノヽノヽノ       :::::::::::::  :::::::: :::ヽ
   |::::::::::::::::::::::::            /  /:::::::: :::::::::::::::::::::           ::::::::
         TRUELOZVE?              FALSE


611 :デフォルトの名無しさん:02/11/10 02:30
発端は南蛮だっけ?

612 :デフォルトの名無しさん:02/11/10 02:30
>>605
boolなのにtrueと比べられないよりいいだろ。

613 :デフォルトの名無しさん:02/11/10 02:31
>>565
だからちゃんと読めって!
俺は!=FALSEと書くよりも==TRUEが良いと言っているだけ。
if(hoge()==TRUE)の弊害?
アホか。


614 :デフォルトの名無しさん:02/11/10 02:31
>>609
苦しくなったからって誤魔化すのはやめろ

615 :デフォルトの名無しさん:02/11/10 02:32
true,falseより非0,0の方がわかりやすくていいな・・・
そういう書き方に慣れているからだろうけどね。

616 :デフォルトの名無しさん:02/11/10 02:33
>>613
>>528>>598 を見ていないのか?
それともその上で言ってるのか?

617 :デフォルトの名無しさん:02/11/10 02:33
>>613
その話はとうの昔に終わってんだよハグェが
==TRUE はやめろ。どうしてもやりたいなら != FALSE
過去ログ読んで回線切って師ね

618 :デフォルトの名無しさん:02/11/10 02:33
「if文中の式の真偽」と
「_Bool/book変数が保持する真偽」
の区別が付かない香具師がいるな

619 :デフォルトの名無しさん:02/11/10 02:34
book->boolナ

620 :デフォルトの名無しさん:02/11/10 02:34
book変数age

621 :デフォルトの名無しさん:02/11/10 02:35
C言語最高!
boolだとかガキ向けの言語仕様はすっこんでろ。
大人ならば全て自分の責任で判断するのさ。

622 :デフォルトの名無しさん:02/11/10 02:35
0,非0でやっているからこそ文字列の終わりが偽となって便利なんだよ。

623 :デフォルトの名無しさん:02/11/10 02:35
C の組み込み型に book 型キボン

624 :デフォルトの名無しさん:02/11/10 02:36
ああそういえばC99には_Boolなんてのがあるんだっけ?

625 :デフォルトの名無しさん:02/11/10 02:36
>>609
だからね。
>>595 のように、そのような仕様になっている理由はちゃんとある。
それを糞と呼ぶのは自由だが、「もし最初っから真偽値型があったのなら」 なんて
絶対あり得ない仮定はもっとクソだって言ってるの。
603 の方が苦しい発言だろうが。

626 :デフォルトの名無しさん:02/11/10 02:36
return TRUE;

return !TRUE;

627 :デフォルトの名無しさん:02/11/10 02:37
だらだら長く書いて結局言いたいことは「だからそんなCは糞だ」
そんなのは頼むから他スレ行ってやってくれよ。

628 :625:02/11/10 02:37
またやった YO・・・
宛先は >>614

629 :デフォルトの名無しさん:02/11/10 02:38
>>625
だから数値と真偽値が変換できる必要性を示せ。

630 :デフォルトの名無しさん:02/11/10 02:39
利便性ちゃうかと

631 :!625:02/11/10 02:39
>>629
俺はそもそも真偽値(bool型)なんてない方がいいと思っているんだがどうだ?

632 :デフォルトの名無しさん:02/11/10 02:39
>>629
>>622というわけだ。

633 :デフォルトの名無しさん:02/11/10 02:40
>>629
595 を読んでまだ分からないか?
アフォですか?

634 :デフォルトの名無しさん:02/11/10 02:40
>>632
文字の終わりは\0だろ。

635 :デフォルトの名無しさん:02/11/10 02:40
>>631
時代遅れ

>>632
どう便利なの?

636 :デフォルトの名無しさん:02/11/10 02:41
>>634
\0は偽ですが。
もしもfalseのみ偽となり、0と互換性がなかったら偽とならず不便だ。

637 :デフォルトの名無しさん:02/11/10 02:42
>>633
>>595は0/非0を判定する命令があっても数値と真偽値が変換できる必要性とは
関係ないと反論した。


638 :デフォルトの名無しさん:02/11/10 02:42
>>629
おこちゃまですか?

639 :デフォルトの名無しさん:02/11/10 02:42
>>635
・・・・・・・・。
Cでプログラム書いたことある?

640 :デフォルトの名無しさん:02/11/10 02:43
>>636
だからどう不便なんだYO!
おまえら不便って言いたいだけちゃうんかと(略

641 :デフォルトの名無しさん:02/11/10 02:43
なぜ数値と真偽値が変換されうるのかという声が上がり再び議論
    ∧_∧                       ∧_∧
    (  ´Д`)     ∧_∧              (  ´Д`)     ∧_∧
   /    \    (´Д` )            /    \    (´Д` )
__| |     | |_   /    ヽ、       .__| |    .| |_   /    ヽ、
||\  ̄ ̄ ̄ ̄   / .|   | |        ||\  ̄ ̄ ̄ ̄    /|    | |
||\..∧_∧    (⌒\|__./ ./        .||\..∧_∧    (⌒\|__./ ./
||. . (    )     ~\_____ノ|  ∧_∧. ||. .(    )     ~\_____ノ|    ∧_∧
.  _/   ヽ          \|   (´Д` ).  _/   ヽ          \|    (´Д` )
.  |     ヽ          \ /    ヽ.   |     ヽ          \  /     ヽ、
.  |    |ヽ、二⌒)       / .|   | |   |    |ヽ、二⌒)        / .|    | |
.  .|    ヽ \∧_∧   (⌒\|__./ ./ .  .|    ヽ \∧_∧    (⌒\|__../ ./
   ヽ、___(    )      ~\_____ノ|  ∧_∧ ___(    )      ~\_____ノ|   ∧_∧
.         _/   ヽ          \| (´Д` ).    _/   ヽ          \|   (´Д` )
.         |     ヽ          \ /    ヽ、   |     ヽ          \ /    ヽ、
.         |    |ヽ、二⌒)       / .|   | | .   |    |ヽ、二⌒)       / .|    | |
.         .|    ヽ \\       (⌒\|__./ ./ .   .|    ヽ \\       (⌒\|__./ ./
.         ヽ、____ \\       ~\_____ノ| .   ヽ、____ \\      ~\_____ノ|


642 :デフォルトの名無しさん:02/11/10 02:43
>>636
なにが不便なの?

643 :デフォルトの名無しさん:02/11/10 02:43
>>640
strlenとか自分で書いてみれば分かると思うが

644 :デフォルトの名無しさん:02/11/10 02:43
>>639
ある。
ちなみにおまえは C 以外でプログラム書いたことあるのか?

645 :デフォルトの名無しさん:02/11/10 02:44
>>644
Perlを少々・・・
あれは文字列をひとつのものとして扱えるから。

646 :デフォルトの名無しさん:02/11/10 02:44
真が非0ではそんなに不満なのか?

647 :デフォルトの名無しさん:02/11/10 02:45
>>646
俺は不満じゃない。

648 :デフォルトの名無しさん:02/11/10 02:46
>>643
strlenでは文字のポインタが\0になるカウンタを+1しながら
まで繰り返すだけだろ。

649 :デフォルトの名無しさん:02/11/10 02:46
bool main(){
return true;
}
のほうがいいですか?

650 :デフォルトの名無しさん:02/11/10 02:46
>>648
例はstrcpyの方がいいか。


651 :648:02/11/10 02:47
訂正
strlenでは文字のポインタの値が\0になるまでカウンタを+1しながら
繰り返すだけだろ。


652 :デフォルトの名無しさん:02/11/10 02:47
ch != '\0'
良いじゃん、これで。


653 :デフォルトの名無しさん:02/11/10 02:47
今日は論争っぽく流れ早いけどあんまりおもしろくないな。

654 :デフォルトの名無しさん:02/11/10 02:47
>>649
void main()がいい

655 :デフォルトの名無しさん:02/11/10 02:48
>>646
真が非0に、偽が0に”変換できる”ことが不満。

656 :デフォルトの名無しさん:02/11/10 02:49
while(<STDIN>){
print;
}


657 :デフォルトの名無しさん:02/11/10 02:49
>>637
反論になってないよ。単に反対しただけだろう。

658 :デフォルトの名無しさん:02/11/10 02:49
>>649
mainは真偽値を返すのではなくエラーコードを返す方がなにかと便利だから
やっぱりintがいいんじゃない。

659 :デフォルトの名無しさん:02/11/10 02:49


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




660 :デフォルトの名無しさん:02/11/10 02:50
0 == 0ってどんな値を返すの?

661 :デフォルトの名無しさん:02/11/10 02:50
>>657
反論になってる。よく読め。

662 :デフォルトの名無しさん:02/11/10 02:50
while(<>){
print;
}

663 :デフォルトの名無しさん:02/11/10 02:50
Cに真偽値が追加されても(C99には既にあるみたいだが)、実際に使うことはなさそうだなー


664 :デフォルトの名無しさん:02/11/10 02:51
Perl厨はきえろ

665 :デフォルトの名無しさん:02/11/10 02:52
>>663
追加された意味がわからない人ですか?

666 :デフォルトの名無しさん:02/11/10 02:52
>>661
どこが反論になってるかさっぱり分からないから、レス番号とその分を示せ。

667 :デフォルトの名無しさん:02/11/10 02:52
>>663
真性のあふぉだな。ないと困るという声が強かったからこそ
わざわざ追加されたのに

668 :デフォルトの名無しさん:02/11/10 02:52
>>665
世の中の潮流に合わせただけだと思っているんですけど。
でも使うことはなさそう。

669 :デフォルトの名無しさん:02/11/10 02:52
ctype.hもあるからな。


670 :デフォルトの名無しさん:02/11/10 02:53
>>667
おいおい。使われることはなさそうなんて言っていないぞ。
"俺は"使うことはなさそうと言っているだけ。

671 :デフォルトの名無しさん:02/11/10 02:53
だから、お前らちゃんと名前欄に番号とかいれろ。誰が誰だか
さっぱりだ。

672 :デフォルトの名無しさん:02/11/10 02:54
>>666
じゃあ反論になってないと言うな。レスぐらい読め。

673 :デフォルトの名無しさん:02/11/10 02:54
>>670
分かってるよ
つまりおまえは真偽値型の必要性が分かってないんだろ?

674 :デフォルトの名無しさん:02/11/10 02:54
今のCのif文になにか不満でもあるの?

675 :デフォルトの名無しさん:02/11/10 02:55
非0が真で0が偽でいいだろ。

676 :デフォルトの名無しさん:02/11/10 02:55
>>667
どの辺が困るんだったっけ?

677 :デフォルトの名無しさん:02/11/10 02:55
>>673
ああ。
なくても全然困らないし。

678 :デフォルトの名無しさん:02/11/10 02:55
自身の無い奴だけデフォルトで逝け。

679 :デフォルトの名無しさん:02/11/10 02:56
TRUEと比べられないというアホみたいなことがなくてすむ。

680 :デフォルトの名無しさん:02/11/10 02:56
>>669
・・・今までの話と何の関係が?

681 :デフォルトの名無しさん:02/11/10 02:56
string.hもあるしね

682 :デフォルトの名無しさん:02/11/10 02:57
TRUEってのは何だ?

683 :デフォルトの名無しさん:02/11/10 02:57
>>679
どういうときにTRUEと比べるの?

684 :デフォルトの名無しさん:02/11/10 02:57
>>679
あぁ、そうだった。

685 :デフォルトの名無しさん:02/11/10 02:58
>>672
読んで分からなかったから訊いただけだ。
それとも、反論があることを証明できないのか?
その方法は簡単、666 の事を実行するだけだ。
そうしてくれないなら以降無視する。

686 :デフォルトの名無しさん:02/11/10 02:59
やっぱFORTRAN最高!

687 :デフォルトの名無しさん:02/11/10 02:59
ああそうか。
俺はtypedef&#defineのboolを使ったことがないから、真偽値の必要性がわからないんだ。

688 :デフォルトの名無しさん:02/11/10 02:59
>>680
ctype.hにはishoge系の関数があるだろ。
過去の資産もあるからそう簡単には変えられないだろうと言いたかった。


689 :デフォルトの名無しさん:02/11/10 02:59
>>683
わからないが、617 はそう書けと主張している。

690 :680:02/11/10 03:00
>>688
あ、了解。なるほどね。

691 :687:02/11/10 03:00
しまった・・・&#と書いたら?になっちまった。
typedef & #define

692 :デフォルトの名無しさん:02/11/10 03:01
>>691
トークンはホワイトスペースで区切る癖をつけた方がいいぞ。

693 :デフォルトの名無しさん:02/11/10 03:02
ホワイトスペースって何?

694 :デフォルトの名無しさん:02/11/10 03:02
>>688
型が変わる程度でロジック弄る必要はないのでは?

695 :687:02/11/10 03:02
>>692
はぁ・・・
プログラム書くときも開けていないや。みにくいかな。

696 :デフォルトの名無しさん:02/11/10 03:02
Cでオブジェクト思考する方法を教えてください

697 :687:02/11/10 03:03
>>693
isspaceが真を返すものかな?
スペースとかタブとか改行とか

698 :デフォルトの名無しさん:02/11/10 03:03
>>696
ちょっと待ってろ。

699 :デフォルトの名無しさん:02/11/10 03:03
>>696
勝手に思考してください
マジレスすると、GTK+ とかが参考になるかもね

700 :デフォルトの名無しさん:02/11/10 03:04
                              γ      γ
       ∧_∧   bool 論争終わり?             γ
       (::::::::::: )   なんだか寂しいな・・・       ......................................
      .(○::::::: )                      .::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::........
     ~"''"""゛"゛""''・、                   ...:::::;;;''        ';;;:::::.......
 "”゛""''""“”゛゛""''' "j'                 ...::::;;;''            '';;;::::::.........
 :::::ヘ :::::....ヽ :::;;;ノ  ::(                ....::::::;;              '';;;::::::::::.......
 ::  ゝ  :::::......ノ:;;../  ~~^^ ~~~~~^^^~

701 :デフォルトの名無しさん:02/11/10 03:05
まあ、整数値が真偽値に変換できたほうが便利と言ってるやつらは
軒並みあふぉだったことは分かった

702 :デフォルトの名無しさん:02/11/10 03:06
単項演算子と識別子の間は、空けない方が見やすいかも。

703 :デフォルトの名無しさん:02/11/10 03:06
>>700
enum bool = { FALSE = 0, TRUE = 1, ERROR = -1};
これをやろう。

704 :デフォルトの名無しさん:02/11/10 03:07
>>703
ネタ

705 :デフォルトの名無しさん:02/11/10 03:07
>>694
その形が変わるのがちょっとなぁ。
一方の自作ishogeは_Boolで既存のライブラリはintは違和感がある。


706 :デフォルトの名無しさん:02/11/10 03:07
13:勝利宣言をする
「まあ、整数値が真偽値に変換できたほうが便利と言ってるやつらは
 軒並みあふぉだったことは分かった」

707 :デフォルトの名無しさん:02/11/10 03:10
だいたい真偽値っていってもマシン語コードにしたら整数値なんだから
それらを区別する意味って何かあるの?

708 :デフォルトの名無しさん:02/11/10 03:11
オマエラこんな毎晩論争してんの?
お疲れさん。

709 :デフォルトの名無しさん:02/11/10 03:11
便利というか簡潔になる。
char *s;
for (s=str; *s; s++)
....;
とか。

710 :デフォルトの名無しさん:02/11/10 03:12
>>707
同じようなこと言ったら、仕様と実装の区別が付かない阿呆と言われますた。

711 :デフォルトの名無しさん:02/11/10 03:14
>>709
その代わり分かりにくくなるけどね。

712 :デフォルトの名無しさん:02/11/10 03:15
>>711
まあ、Cではこう書くもんだと慣れた。

713 :デフォルトの名無しさん:02/11/10 03:16
>>709
for ( s=str; *s != '\0'; s++ )
でも十分簡潔だが?分かり安いし

まあ、おれは 709 で書くけどな

714 :デフォルトの名無しさん:02/11/10 03:16
ばかばっか

715 :デフォルトの名無しさん:02/11/10 03:16
>>711
慣れの問題じゃない?俺は比較してるほうが読みにくいかも。

716 :デフォルトの名無しさん:02/11/10 03:16
*sより*s!='\0'の方が「'\0'になったら終了」って言う意味では分かり易い。


717 :デフォルトの名無しさん:02/11/10 03:17
>>707
そんなことを言ったらすべてのデータはバイナリなんだからと区別する意味ってあるの?ってなりますよ。
高級言語になればなるほどマシン語コードから離れてより概念的なものになるもんです。

718 :デフォルトの名無しさん:02/11/10 03:19
漏れの使ってるコンパイラの吐くコードは、*s でも *s! = '\0' でも変わらない。
だからどちらでもいい。
前者は C プログラマにわかりやすい。
後者は他言語プログラマにわかりやすい。

719 :デフォルトの名無しさん:02/11/10 03:19
>>716
それならuntilとかの方が分かりやすい
*s=='\0'ってなるから。

720 :デフォルトの名無しさん:02/11/10 03:20
ん?
701=714 は 685 に答えられなかった 672 なの?

721 :デフォルトの名無しさん:02/11/10 03:20
>>717
個人的にはCでは区別しなくてもいいと思ってます。

722 :デフォルトの名無しさん:02/11/10 03:20
>>718
他言語プログラマはそもそも文字列が文字の配列ってのがやりにくいかも。

723 :デフォルトの名無しさん:02/11/10 03:20
717 は C が高級言語だと信じているのか?

724 :デフォルトの名無しさん:02/11/10 03:21
>>722
いや、配列がコピーされて関数に渡らないことのほうが・・・


725 :デフォルトの名無しさん:02/11/10 03:22
>>723
717じゃないが、+で二つの値を足せるだけでも十分高級だと思うが。

726 :デフォルトの名無しさん:02/11/10 03:22
>>720
おいおい、おれは 701 だが 714 ではない。 672 も知らん。

727 :デフォルトの名無しさん:02/11/10 03:22
>>726
いいから釣られるなよ。 

728 :デフォルトの名無しさん:02/11/10 03:23
>>725
アセンブラでもできると思うが。

729 :デフォルトの名無しさん:02/11/10 03:23
725 が衝撃的事実を発表しますた

730 :デフォルトの名無しさん:02/11/10 03:24
>>719
まぁuntilなんて予約語は無い訳だが。


731 :デフォルトの名無しさん:02/11/10 03:24
>>719
そりゃそうかもしれんが、ここでは
for ( s=str; *s; s++ ) と
for ( s=str; *s != '\0'; s++ ) の場合だろ。
つうか前者ようなコードを初めて見て後者のコードと同じ意味と
すぐに分かった奴っているんだろうか?

732 :デフォルトの名無しさん:02/11/10 03:24
>>724
・・・どういう事?
引数に指定すれば配列丸ごと値渡しになるけど、そういう事ではない?

733 :デフォルトの名無しさん:02/11/10 03:25
printfがあるだけでも高級だと思うが。

734 :デフォルトの名無しさん:02/11/10 03:25
>>728
アセンブラだともっといろいろかかないとだめじゃん

>>729
一応高級言語は環境に依存しないという意味だってことは分かっています(^_^;)

735 :デフォルトの名無しさん:02/11/10 03:25
#define until(x) while(!(x))

736 :デフォルトの名無しさん:02/11/10 03:26
>>732
配列の先頭アドレスの値渡しだろ?
配列がコピーされるわけじゃない。

737 :デフォルトの名無しさん:02/11/10 03:26
>>731
while (*s++ = *t++);
とかもな。

738 :デフォルトの名無しさん:02/11/10 03:26
>>一応高級言語は環境に依存しないという意味だってことは分かっています(^_^;)
そんな意味だったっけ?

739 :デフォルトの名無しさん:02/11/10 03:26
Cが高級言語って知らない奴がいるのか?
それとももっと高級な言語が出てきたからCが低級言語にでもなったとでもいうのかな。

740 :734:02/11/10 03:27
>>738
ちがかった?
マシンに近ければ近いほど低級で、人間に近ければ近いほど高級だと思っていたけど

741 :デフォルトの名無しさん:02/11/10 03:27
>>731
初めて見てそう判断するのは難しいが、そのような人は C プログラマーとは
言えないだろう。

742 :デフォルトの名無しさん:02/11/10 03:27
printfはc言語の一部では無いけど。


743 :デフォルトの名無しさん:02/11/10 03:27
>>734
RISCじゃないのは1命令で書けますよ

744 :デフォルトの名無しさん:02/11/10 03:28
買わないといけない言語は高級言語・・・俺のリアル厨房の時の理解

745 :デフォルトの名無しさん:02/11/10 03:29
C は、アセンブリ言語に比べれば間違い無くレベルが高いが、高級言語と呼んで
いいかどうか迷うくらいにはそれとのレイヤーが薄い。

746 :デフォルトの名無しさん:02/11/10 03:30
add $s0,$t1,$t2; $s0=$t1+$t2


747 :デフォルトの名無しさん:02/11/10 03:30
>>745
高級アセンブラ・・・

748 :734:02/11/10 03:30
Cは高級言語の中では低級な部類だと思っている。
でも低級言語だとはおもわないなー

749 :デフォルトの名無しさん:02/11/10 03:31
昔は高級言語だったが今は高級言語ではない

750 :デフォルトの名無しさん:02/11/10 03:32
今度はC言語は高級言語か論争かよ。

751 :734:02/11/10 03:32
>>749
ソウダッタノカー(TДT)


752 :デフォルトの名無しさん:02/11/10 03:33
比較があっての高級低級であり
何と比較していたか、または何と比較しているかが本質と思われ。
そこを統一しないと永遠に論争は解決しないと思われ。

753 :デフォルトの名無しさん:02/11/10 03:33
>>746
個々の環境の命令によらず+で足せるのは高級だと見ていい?

754 :デフォルトの名無しさん:02/11/10 03:34
744 に則れば、ほとんどの言語が高級言語ではないな。

755 :デフォルトの名無しさん:02/11/10 03:35
>>754 COLDFUSIONはかなり高級


756 :デフォルトの名無しさん:02/11/10 03:35
厨房言語==高級言語

757 :デフォルトの名無しさん:02/11/10 03:36
>>754
Delphiを低級言語っていうな!

758 :デフォルトの名無しさん:02/11/10 03:36
>>747
アセンブリ言語とは明確に違う。
アセンブリ言語はコードに無い動作は絶対にしない。
C はある程度の裏処理があり、また逆に最適化によって書いてあるコードが実行
されない場合もある。

759 :デフォルトの名無しさん:02/11/10 03:37
何が高級言語かって決まっているもんじゃないのか?

760 :デフォルトの名無しさん:02/11/10 03:38
>>759
学校でそう教えられたんだね。よしよし

761 :デフォルトの名無しさん:02/11/10 03:39
>>759 MS-DOS バッチファイル

762 :デフォルトの名無しさん:02/11/10 03:39
だれだ、このスレの最適化オプションを偽にしたのは?

763 :デフォルトの名無しさん:02/11/10 03:40
Cは高水準言語だけど、文字列の扱いとかは低水準って言われるね。
だからC++ではstd::stringなんか使うわけで。

764 :デフォルトの名無しさん:02/11/10 03:40
仕様です

765 :デフォルトの名無しさん:02/11/10 03:40
>>758

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


766 :デフォルトの名無しさん:02/11/10 03:40
結局、752 が妥当だろうな。

ただ、アセンブリ言語が一番低級なのは間違いない。
それよりレベルを下げると、ソフトウェアではなくなる。

767 :デフォルトの名無しさん:02/11/10 03:41
機械語を忘れてませんか?

768 :デフォルトの名無しさん:02/11/10 03:41
環境は言語の高級さに関係無い。
言語仕様にのみ関係する。


769 :デフォルトの名無しさん:02/11/10 03:42
高級言語で検索したらC言語が引っかかった

770 :デフォルトの名無しさん:02/11/10 03:42
>>768
言っていることは正しいが場違い。

771 :デフォルトの名無しさん:02/11/10 03:43
>>769
それが正しい根拠は。
検索エンジンの検索結果が正しいなら、いくらでも自作自演できるが。

772 :デフォルトの名無しさん:02/11/10 03:44
#define 低級 アセンブリ言語
#define 高級 (!低級)

(^o^)/


773 :デフォルトの名無しさん:02/11/10 03:44
ひょっとして>>4の言うように1000取り合戦が始まっているのか?

774 :デフォルトの名無しさん:02/11/10 03:45
>>772
機械語は高級言語だたのか

775 :デフォルトの名無しさん:02/11/10 03:45
if (C言語 == 高級)
という風にしたいんですが・・・

776 :デフォルトの名無しさん:02/11/10 03:46
>>775
それじゃダメだよ
!低級
とした時点である値に決まってしまうから

777 :デフォルトの名無しさん:02/11/10 03:47
>>775
日本語の識別子が利用可能なコンパイラを使用してください。

778 :デフォルトの名無しさん:02/11/10 03:47
ん? で結局C言語がboolが数値に、数値がboolに変換できるようにした必要性はどうなったの?

779 :デフォルトの名無しさん:02/11/10 03:47
>>776
じゃあ if (C言語) ってすればいいんですか?

780 :デフォルトの名無しさん:02/11/10 03:47
>>773
すまん、それ漏れが貼った

781 :デフォルトの名無しさん:02/11/10 03:49
>>780
論争を引き起こした張本人はあんたか!?

782 :デフォルトの名無しさん:02/11/10 03:49
>>778
それは便利だ(と思われていた)から。今となっては時代遅れだが
気付いたときには時すでに遅し。

>>776
もしくは if (C言語 != 低級)

783 :4=780:02/11/10 03:50
>>781
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、すまなかった
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|

784 :デフォルトの名無しさん:02/11/10 03:50
もともとC言語にboolなんてあったのか?

785 :デフォルトの名無しさん:02/11/10 03:50
(!0):0で無いもの(であるべき)



786 :デフォルトの名無しさん:02/11/10 03:51
>>784
ない。
C99には_Boolってのがあるらしいが。アンダーバーが決め手☆

787 :デフォルトの名無しさん:02/11/10 03:52
>>785
コンパイラが複雑になるわけだ、それだと

788 :デフォルトの名無しさん:02/11/10 03:53
(!0) -> (!偽) -> (真) -> 真

789 :デフォルトの名無しさん:02/11/10 03:54


             腹  減  っ  た  。

     ラ  ー  メ  ン  で  も  食  う  か  。



790 :デフォルトの名無しさん:02/11/10 03:54
しかしあれだな。
真偽値がないと困るって言ってるヤツは
Cでまともなプログラムを書いたことのない
他言語使いなんだろうな。

分かってるふりして参加してるだけ。

791 :デフォルトの名無しさん:02/11/10 03:55
まともなプログラム書いてたら真偽値型が欲しいと思うんだけどな

792 :デフォルトの名無しさん:02/11/10 03:56
>>791
いや、お前は間違いなく他言語使い。

793 :デフォルトの名無しさん:02/11/10 03:56
無いと(表記がバラバラで統一されていない事により弊害が出る為)困る


794 :デフォルトの名無しさん:02/11/10 03:56
>>789
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、うまい豚骨ラーメンを食ったことがない
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|

795 :デフォルトの名無しさん:02/11/10 03:57
Cから始めた人なら使うことはあまりなさそうな気もする。

796 :デフォルトの名無しさん:02/11/10 03:58
>>793
表記がばらばらってどゆことよ?

797 :デフォルトの名無しさん:02/11/10 03:58
>>792
他言語使いってナニよ?
おまえはC言語しか使ったことないヒキコモリオタなんだろ?

798 :もまずにパピコ:02/11/10 03:59
うまくいえねーけど真偽値型ってプリミティブじゃねーよな。

799 :デフォルトの名無しさん:02/11/10 03:59
> 無いと(表記がバラバラで統一されていない事により弊害が出る為)困る
たとえあっても表記はバラバラになると思うが。

ゼロ/非ゼロだけで十分。

800 :デフォルトの名無しさん:02/11/10 03:59
真か偽かが問題のときは if (b) か if (!b) でしか書かないからな

801 :デフォルトの名無しさん:02/11/10 04:00
bool,_bool,__Bool,BOOL


802 :デフォルトの名無しさん:02/11/10 04:00
>>800
ところが、わざわざ TRUE と FALSE を定義して
if ( b == FALSE )
したがるやつがいるわけですが

803 :デフォルトの名無しさん:02/11/10 04:01
>>798
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、intで十分。
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|

804 :デフォルトの名無しさん:02/11/10 04:01
if (b) と if (!b) に統一する!!

805 :デフォルトの名無しさん:02/11/10 04:02
> 他言語使いってナニよ?

Cの基本を少しかじったてみただけのくせに
その仕様の是非を語っている厨房のことだが。
つまりお前みたいな奴ね。

806 :デフォルトの名無しさん:02/11/10 04:03
>>805
では次は算術シフトと論理シフトについて語ってみようか。

807 :805:02/11/10 04:03
訂正。
× Cの基本を少しかじったてみただけのくせに
○ Cの基本を少しかじったみただけのくせに




808 :デフォルトの名無しさん:02/11/10 04:04
>>805
(゚Д゚)ハァ?
おまえはひきこもって仕様書ばっか読んでて
実際にプログラム書いたことなんてないんだろ?

809 :デフォルトの名無しさん:02/11/10 04:04
>>806
Cと関係ないような

810 :デフォルトの名無しさん:02/11/10 04:05
>>799
例え自分が使わないとしても規格として存在しているなら今後bool型を定義する奴は
少なくなるしソースを読む側の負担が減る。


811 :デフォルトの名無しさん:02/11/10 04:05
>>809
あるよ。明示的に論理右シフトする方法がCにはない

812 :デフォルトの名無しさん:02/11/10 04:06
引きこもりに引きこもり呼ばわりされちゃったよ。

813 :デフォルトの名無しさん:02/11/10 04:06
>>810
じゃあ if (b == FALSE) と書けと言うのか?

814 :デフォルトの名無しさん:02/11/10 04:06
>>811
それなら(unsigned int)ってすればいいと思うけど

815 :デフォルトの名無しさん:02/11/10 04:07
>>811
unsigned でもダメか?

816 :デフォルトの名無しさん:02/11/10 04:07
>>814
あれ?それじゃダメだったんじゃ.....うる覚えスマソ

817 :デフォルトの名無しさん:02/11/10 04:09
うる覚え・・・

818 :デフォルトの名無しさん:02/11/10 04:10
>>813
そんな事は一言も言ってないが。
書きたくなけりゃ書かなければ良い。


819 :デフォルトの名無しさん:02/11/10 04:12
>>816
大抵の処理系がsignedなら算術、unsignedなら論理になるってだけだと思った。


820 :デフォルトの名無しさん:02/11/10 04:12


              ラ  ー  メ  ン  食  っ  た  。

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



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

しかし正直、俺様用しおりって役に立たないな。

821 :デフォルトの名無しさん:02/11/10 04:13
>>813
つまり if が bool 型しかとれないようにすれば
if ( b == FALSE )
なんて書こうとするばかはいなくなるってこった

822 :デフォルトの名無しさん:02/11/10 04:14
unsigned なら確実に論理シフトになると思うけど違うの?

823 :デフォルトの名無しさん:02/11/10 04:14
b == FALSE が bool 型にならんのか?

824 :デフォルトの名無しさん:02/11/10 04:14
>>819
それって仕様で決まってる?

825 :デフォルトの名無しさん:02/11/10 04:15
なんかしらんけど、ブール値の扱いが問題なら

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

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

if(b==TRUE)だのif(b==FALSE)だのと書く人は、
C FAQ一回読んどいた方が・・・

826 :デフォルトの名無しさん:02/11/10 04:15
>>824
だから大抵の処理系ではと言っているでしょ。

827 :デフォルトの名無しさん:02/11/10 04:15
大体
if(hoge)と
if(hoge!=FALSE) とか if(hoge!=NULL)

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

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

ある程度ソースを読んだ経験があれば、どちらの
スタイルで書かれていようが関係ないと思うんだが。

828 :デフォルトの名無しさん:02/11/10 04:16
#define isTrue(x) x!=0
#define isFalse(x) x==0

829 :デフォルトの名無しさん:02/11/10 04:16
>>823
だからね
if ( b == FALSE )
としたいやつらってのは b の型を
明示したいってことらしいのね

830 :デフォルトの名無しさん:02/11/10 04:17
>>811
論理シフトじゃなくて算術シフトだろ。

符号付き整数型の右シフト>>が算術シフトであるか論理シフトであるかは実装依存。
論理シフトはunsignedキャストで符号無しにすればできる。


831 :デフォルトの名無しさん:02/11/10 04:18
>>826
いや、だからそれが論争のネタになるわけですが

832 :デフォルトの名無しさん:02/11/10 04:19
>>830
あ、逆だったのねスマソ

833 :デフォルトの名無しさん:02/11/10 04:19
さっきラーメンを食った漏れは >>827 に賛成。

834 :デフォルトの名無しさん:02/11/10 04:20
>>829
関数の中で変数の型がすぐに分からないほどナガーイ関数
書いてる馬鹿に取っては、問題なのかもねえ。

835 :デフォルトの名無しさん:02/11/10 04:21
ちょっと待て、ブーリアン

836 :デフォルトの名無しさん:02/11/10 04:22
ソースが込み入ってくるとif(hoge),if(!hoge)は見づらいと思う。


837 :デフォルトの名無しさん:02/11/10 04:22
ブーレアンだろ

838 :デフォルトの名無しさん:02/11/10 04:22
>>829
でも型くらい上の方みればすぐわかると思うが。
if (p == NULL) は分からんでもないが
if (b == FALSE) ってのは・・・

839 :デフォルトの名無しさん:02/11/10 04:22
>>834
まあ、事の発端では変数でなく関数ってことだったんですが
if ( hoge() == TRUE )
てか過去ログ読まずにレスしないで

840 :デフォルトの名無しさん:02/11/10 04:22
>>838
p や b が関数だった場合は?

841 :デフォルトの名無しさん:02/11/10 04:23

==での型の明示にこだわってる奴はただの初心者。

842 :デフォルトの名無しさん:02/11/10 04:24
>>841
それは大半の人間が分かってる
しかしプログラムを書くのは中、上級者だけではない

843 :デフォルトの名無しさん:02/11/10 04:25
自分が分かりやすければそれで良いと思ってる奴は初心者。


844 :デフォルトの名無しさん:02/11/10 04:25
>>840
if (hoge()) ...でいいと思うが。
hoge()の型が分からない?
返り値の型が分からないような関数使うな!!

845 :デフォルトの名無しさん:02/11/10 04:25
>>836
聞きたい。
実際に込み入ったソースでそれを目にすると、どうして見づらいと思う?

846 :デフォルトの名無しさん:02/11/10 04:25

型よりも意味付けの方が重要。
つまり関数が失敗か成功かなど。


847 :デフォルトの名無しさん:02/11/10 04:26
>>844
型が分からんというより、見ただけで(調べないと)分からないのがいやってこと
だったと思う。本人じゃないので知らんが

848 :デフォルトの名無しさん:02/11/10 04:26
>>843
Cプログラマならif(hoge==TRUE)よりもif(hoge)の方がわかりやすいだろ

849 :デフォルトの名無しさん:02/11/10 04:27
BOOL型がないCで、TRUEやFALSEと必ず等価になる整数値って決められるのかな?
関数の戻り値なんて、関数仕様できまってるのは0と0以外だったりするでしょ?
別にそれはCの仕様じゃなくて、単なる約束事でしかないし。

NULLポインタをソース上で0(またはヘッダでデファインされるNULL)と書くのは、
0は整数ではなくてNULLポインタをあらわす特別なシンボルだからってのは知って
る上での議論ですか?これ。

850 :デフォルトの名無しさん:02/11/10 04:28
>>849
述べていることは正しいけど、何を訴えたいのかが書かれていないよ。

851 :デフォルトの名無しさん:02/11/10 04:29
>>847
別にわからなくてもいいような気がするけど。
重要なのはその関数を真偽の判定につかえるかどうかだと思う。

852 :デフォルトの名無しさん:02/11/10 04:30
>>843
==があった方が分かりやすいと思ってる奴はただの初心者。
上級者ならどちらだろうが関係ない。

853 :デフォルトの名無しさん:02/11/10 04:32
>>850
ごめそ。
だからBOOLをdefilneしてif(hoge==FALSE)だのというのは、閉
じてない世界で一般的につかうのはキケンでさえある用法だとオモイマス、
ということで。

外部とのコミュニケーションが全くない閉じた世界で、全てその
defineをつかうという「コーディング規定」があって、全員が
それを守る、と言う特殊な環境なら、まあいい・・・のかな?

854 :デフォルトの名無しさん:02/11/10 04:32
どうも話がぐるぐる回っているようだ

855 :デフォルトの名無しさん:02/11/10 04:33
>>835
既出だが、実例として glib があるのだよこれが

856 :デフォルトの名無しさん:02/11/10 04:35
>>855
レス先間違った?

857 :デフォルトの名無しさん:02/11/10 04:35
== があれかどうかを気にする香具師は DQN ケテーイという事でよろしいか?

858 :855:02/11/10 04:35
>>856
まちがった。>>853 です

859 :855:02/11/10 04:36
>>857
おぬしの日本語の方がよっぽどDQNなわけだが

860 :857:02/11/10 04:37
意味の通らなくなる誤字をしてしまった・・・

== があるかどうかを気にする香具師は DQN ケテーイという事でよろしいか?

861 :デフォルトの名無しさん:02/11/10 04:37
いくら週末で論争に飢えているからといって一晩で同じ内容の論争を二回するな!

862 :855:02/11/10 04:38
>>860
よろしいが、とっくの昔に分かっていたことではある

863 :デフォルトの名無しさん:02/11/10 04:38
>>853
#define TRUE 1
#define FALSE 0
ってして関数の中で return FALSE; とかするのはいいのよ。
でも真偽値のつもりで返してるなら
if (!hoge())じゃない?

864 :デフォルトの名無しさん:02/11/10 04:38
>>853
ここでは FALSEが0 と(マクロ等を使って)定義されている
という前提の上で話をしているんだと思うが?

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

865 :デフォルトの名無しさん:02/11/10 04:39
>>860

俺も賛成。

866 :デフォルトの名無しさん:02/11/10 04:39
>>861
何が不満なの?

867 :デフォルトの名無しさん:02/11/10 04:39
これの元の発言は、「『VCを前提』にBOOLのTRUEを比較したらまずいよね?」という内容で、
それについての答えは、「まずいよ。」で、とっくの昔に終了してます。

868 :デフォルトの名無しさん:02/11/10 04:40
#include <limits.h>
typedef int bool
#define TRUE INT_MAX
#define FALSE INT_MIN

869 :デフォルトの名無しさん:02/11/10 04:40
>>860
ということにしたのですね :)


870 :868:02/11/10 04:40
セミコロンつけわすれた

871 :デフォルトの名無しさん:02/11/10 04:41
「== があれかどうかを気にする香具師」 って何か気になるな。
アレって何だろ。

872 :デフォルトの名無しさん:02/11/10 04:41
>>871
訂正後につっこむ馬鹿ハケーン

873 :860:02/11/10 04:41
>>869
ええ。

874 :デフォルトの名無しさん:02/11/10 04:41
>>868
どうせならこうでしょう
typedef enum {
TRUE = INT_MAX;
FALSE = INT_MIN
} bool;

875 :デフォルトの名無しさん:02/11/10 04:42
>>867
(゚Д゚)ハァ?
誰が今そんな話をしてるの?

876 :855:02/11/10 04:42
ライブラリがその閉じた世界でそういうdefineをしていて、しかも
それを「仕様」として外部に公開しているなら、あとはそれをつか
うクライアントの責任ですね。

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

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

それがCのルールだと思い込む人がいるのは危険だと思います。
あくまで(よくつかわれているけれど)ローカルルールだとい
うことで。

877 :デフォルトの名無しさん:02/11/10 04:43
>>872
857=871 ですが何か?

878 :!855:02/11/10 04:44
まちがった。>>853デス。

879 :デフォルトの名無しさん:02/11/10 04:44
>>877
なにぃ!?

880 :デフォルトの名無しさん:02/11/10 04:44
> それがCのルールだと思い込む人がいるのは危険だと思います。
> あくまで(よくつかわれているけれど)ローカルルールだとい
> うことで。

はあ?誰がそんなこと思いこんでるんだよ?

881 :デフォルトの名無しさん:02/11/10 04:44
>>876
で、その「仕様」がいろいろと混在するのが問題なわけですな

882 :!855:02/11/10 04:46
>>881
そですね。他のライブラリには他のルールがあるかも。

883 :デフォルトの名無しさん:02/11/10 04:47
>>876は BOOL型がCの仕様だと思ってる奴がいると
思いこんでる一番痛いヤツ。

884 :!855:02/11/10 04:48
>>883
このスレに今いる奴にいるとは思わないけどね。

885 :デフォルトの名無しさん:02/11/10 04:49
>>883
VC++初心者ならいても不思議はないが

886 :デフォルトの名無しさん:02/11/10 04:50
>>879
で、どうなんだ?
「アレ」 が何なのか気になるのかならないのか?

887 :デフォルトの名無しさん:02/11/10 04:53
昔のCだとgotoのラベルもintに代入できたし、
変数も(関数同様)型をつけずに宣言するとintになったそうだ。

888 :デフォルトの名無しさん:02/11/10 04:54
>>887
変数を型指定無しで宣言って、どう書くの? auto?

889 :デフォルトの名無しさん:02/11/10 04:55
非0が「真」だと簡潔に書けることも多いけど、間違えやすいことも確かだね。
まあ、それはCの設計者の選択ということだ。
浮動小数点でも0と非0で偽と真ってのはどうかと思うけどな〜

890 :デフォルトの名無しさん:02/11/10 04:55
>>887
> 変数も(関数同様)型をつけずに宣言するとintになったそうだ。

それは関数外で?
関数内ならc;などと書くとなんの意味もない文だと解釈されるだけだと思うけど

891 :デフォルトの名無しさん:02/11/10 04:55
> VC++初心者ならいても不思議はないが

そんなヤツはDWORDとかLPSTRとかもそう思ってるだろ。
話の次元が違うと思う。

892 :890:02/11/10 04:56
そうか、autoにstaticがあったか

893 :デフォルトの名無しさん:02/11/10 04:56
>>888
main() { x , y = 1; ...}
BASICみたいだね。

894 :デフォルトの名無しさん:02/11/10 04:56
処理系によってはintになるけど。<型無し



895 :デフォルトの名無しさん:02/11/10 04:56
autoなんて予約語、ANSI以前はなかったと思うが…

896 :デフォルトの名無しさん:02/11/10 04:57
>>895
あっただろ?voidはなかったけど

897 :デフォルトの名無しさん:02/11/10 04:57
今何人いるの?

898 :デフォルトの名無しさん:02/11/10 04:58
ANSI以前は標準規格がなかったから予約語は処理系によってばらばらだったんじゃない?

899 :デフォルトの名無しさん:02/11/10 04:58
番号! 1!

900 :デフォルトの名無しさん:02/11/10 04:58
2

901 :デフォルトの名無しさん:02/11/10 04:59
4

902 :デフォルトの名無しさん:02/11/10 04:59
       \                      /
        \                   /
          \                /
           \             /
             \          /
              \ ∧∧∧∧/
               <    俺  >
               < 予 し   >
               <    か  >
 ─────────< 感 い  >──────────
               <    な  >
               < !!!!  い  >
               /∨∨∨∨\
              /         \
            /            \
           /     (-_-)       \
         /      (∩∩)        \
        /                     \

903 :デフォルトの名無しさん:02/11/10 04:59
4++;


904 :デフォルトの名無しさん:02/11/10 05:00
256

905 :デフォルトの名無しさん:02/11/10 05:01
コテハンになろうかな。

906 :デフォルトの名無しさん:02/11/10 05:02
ふむ、3人か.......

907 :デフォルトの名無しさん:02/11/10 05:03
>>902
今までずっと自作自演ですか(爆

908 :デフォルトの名無しさん:02/11/10 05:05
スレのローカルルールでトリップ必須とか

909 :897:02/11/10 05:05
907は漏れっつーことで、>899,>900,>901,>902,>903,>904
の7名ということでっか?

910 :デフォルトの名無しさん:02/11/10 05:06
いちおう参加。

911 :897:02/11/10 05:07
人が多けりゃ、ローカルコテハン付けた方が良いと思う。
トリップ付けたきゃつけてね。

912 :897:02/11/10 05:07
はい8名

913 :デフォルトの名無しさん:02/11/10 05:07
いや、ANSI以前はまじで
x;
と書くと宣言になったらしい。
http://www.et.brad.ac.uk/help/.packlangtool/.langs/.c/.ansi.html
の2 Integerのとこ。

914 :デフォルトの名無しさん:02/11/10 05:07
9.
質問に質問で返していくとだんだんわけがわからなくなってきますね。

915 :デフォルトの名無しさん:02/11/10 05:09
本当だ・・・x; って書いてある・・・

916 :デフォルトの名無しさん:02/11/10 05:09
>>913
ということは、
int a,b;
a=b;
b;

なんて書くとbが先頭で宣言されてねーぞゴルァ!と言われたわけか

917 :ラーメン:02/11/10 05:09
では、漏れはラーメンと名乗る事にしよう。

918 :916:02/11/10 05:11
違うな。
再定義されているぞゴルァか

919 :デフォルトの名無しさん:02/11/10 05:14
今日もう400くらいいってるな。

920 :デフォルトの名無しさん:02/11/10 05:17
今晩はお開き?

921 :デフォルトの名無しさん:02/11/10 05:17
int x; >/DL>

これはタグのミスか?

922 :デフォルトの名無しさん:02/11/10 05:18
#define コテハン FALSE
#define 名無し TRUE
ななしでいいや…。


923 :デフォルトの名無しさん:02/11/10 05:18
>>921
だろうな。

924 :デフォルトの名無しさん:02/11/10 05:19
さて、肉饅でも食って Lisp の勉強すっか

925 :デフォルトの名無しさん:02/11/10 05:27
すみません、こんな時間ですが質問させてください。

お約束の0、NULL、0x00、'\0'についてなのですが、
charやらintやらポインタやらを含む構造体を初期化するときは0x00を使い、
charの配列を初期化するときは0x00ではなく'\0'を使っていたのですが、
そもそもこの使い方は正しいでしょうか?
正しいとすると、結局この2つは等価でしょうか?


926 :デフォルトの名無しさん:02/11/10 05:30
>>925
0,0x00,'\0'はみな同じ
通常は0を使い、文字の場合は'\0'を使うとみやすいと思うよ。
16進数の0x00は他の16進数と一緒に使う場合に有効かも


927 :925:02/11/10 05:34
>>926

えっと、キャストのない素の0があると、これがNULLポインタになって・・・・・・
(すみません、よく分かってません)
なんとなくmemsetの第2パラメータとして"値"を使うには
不適のような気がするのですが・・・・・・。

928 :926:02/11/10 05:34
それと、構造体はmemsetで0に初期化するよりも、メンバーごとに初期化した方がいいと思う。
NULLや0.0は全ビット0とは限らないし。

929 :926:02/11/10 05:35
>>927
ポインタを要求するところやポインタにキャストすると0はNULLとなる。
ただそれだけ。

930 :925:02/11/10 05:39
>>928

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


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



931 :デフォルトの名無しさん:02/11/10 05:39
キタ━━━━━(゚∀゚)━━━━━!!!

>>928
0.0は全ビット0とは限らない。
だが、NULL は全ビット 0 だ。

932 :デフォルトの名無しさん:02/11/10 05:39
>>930
ふつうはNULLと書くとおもうが。

933 :926:02/11/10 05:40
>>930
そう。
struct KOZO{
int i;
double d;
char *p
};

struct KOZO kozo={0,0.0,NULL};と言う感じで。

934 :931:02/11/10 05:41
すまん、逝ってくる。

935 :デフォルトの名無しさん:02/11/10 05:41
>>933
struct KOZO kozo={0,};
とかでもいいね。


936 :932:02/11/10 05:42
おれも逝ってくる。
第二パラメータはポインタじゃなかった。

937 :デフォルトの名無しさん:02/11/10 05:43
>>930
> memsetの第2パラメータはポインタを要求するところではないので、
> 直接0と書いても大丈夫(NULL、にはならない)、ということですよね?

とは言っても、memsetで0を埋める領域に
ポインタ型や浮動小数点型が含まれている時は
ダメだよ。

938 :デフォルトの名無しさん:02/11/10 05:44
逝っちゃった人が 2 人いるスレはここですか?

939 :デフォルトの名無しさん:02/11/10 05:45
memsetは文字配列や整数配列を0で初期化する時くらいしか使わないな。

940 :939:02/11/10 05:47
まあ文字配列は大抵文字列として使うから0で初期化ってのはあまりしないか。

941 :デフォルトの名無しさん:02/11/10 05:47
フィル値がバイト単位で無ければ、もっと使い途あったんだけどナー。

942 :925:02/11/10 05:47
なるほど勉強になります。
たしかに今まで浮動小数点などはほとんど扱っておりませんでした。
なんとな〜く動いていたのですね。


943 :デフォルトの名無しさん:02/11/10 05:47
>>940
'\0' では初期化するだろ。

944 :デフォルトの名無しさん:02/11/10 05:48
>>941
だな。
intの配列に1与えてmemset使っても1で初期化されねーもんな。当たり前だけど。

945 :デフォルトの名無しさん:02/11/10 05:49
memsetで初期化そのあとdoubleとポインタを初期化。

946 :デフォルトの名無しさん:02/11/10 05:49
>>943
大抵は一番最初の要素に'\0'を入れるだけ
全要素'\0'で初期化することはあまりしないな

947 :デフォルトの名無しさん:02/11/10 05:50
>>939
俺は処理系依存を承知でバリバリ使ってる。
  ZeroMemory(&ofn, sizeof(ofn));
とか。(Win32)

948 :デフォルトの名無しさん:02/11/10 05:51
int hoge[100] = { 1 };

949 :デフォルトの名無しさん:02/11/10 05:51
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;
}

950 :デフォルトの名無しさん:02/11/10 05:52
>>947
0ならそれとかbzeroの方が速いんだったか?

951 :デフォルトの名無しさん:02/11/10 05:52
>>948
それ、hoge[1] 以降は全部 0 だぞ。

952 :デフォルトの名無しさん:02/11/10 05:52
int i;
for (i=0; i<n; i++)
hoge[i]=1;

953 :デフォルトの名無しさん:02/11/10 05:53

     次 ス レ の 予 感


954 :947:02/11/10 05:53
>>950
確かVC++では ZeroMemory は memsetのマクロだったはず。

955 :デフォルトの名無しさん:02/11/10 05:54
>>951
??

956 :デフォルトの名無しさん:02/11/10 05:54
>>951
hoge[0]だろ

957 :デフォルトの名無しさん:02/11/10 05:55
>>956
????

958 :947:02/11/10 05:55
>>956
なんで?

959 :デフォルトの名無しさん:02/11/10 05:56
つーか、x86 + VC なら、ポインタも浮動小数点数も ZeroMemory() でいいじゃん。

960 :デフォルトの名無しさん:02/11/10 05:56
>>948
hoge[0]だけが1になったけど、、、

961 :デフォルトの名無しさん:02/11/10 05:56
>>958
なんでってCの配列の添え字は0からじゃん(笑)

962 :947:02/11/10 05:57
>>959
うん。だから処理系依存を承知でと書いたわけだけど。

963 :デフォルトの名無しさん:02/11/10 05:58
次は配列の添え字と初期化論争ですか?

964 :デフォルトの名無しさん:02/11/10 05:58
大域変数
double foo;
void *bar;
とすると、
foo == 0.0、bar == NULL
に初期化されるの?それとも全バイト 0 に初期化されるの?

965 :デフォルトの名無しさん:02/11/10 05:58
memsetって高速化するためにできるだけintバイトごとに初期化していたりする?

966 :デフォルトの名無しさん:02/11/10 05:59
NULLポインタが0で埋まってない処理系ってあるんだ。

967 :デフォルトの名無しさん:02/11/10 05:59
>>964
=0と同じことになる。
doubleに0を入れようとすると0.0を入れようとしたことになるはず。

968 :947:02/11/10 05:59
>>961

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

なんでそれが
> hoge[0]だろ
になるわけ?
以降の意味知ってる?

969 :デフォルトの名無しさん:02/11/10 05:59
誰か次スレ立てて。
漏れ立てられない。

970 :デフォルトの名無しさん:02/11/10 05:59
>>968
あー!
ごめん、なんでそんな勘違いしたんだろ(笑)

971 :デフォルトの名無しさん:02/11/10 06:00
>>968
hoge が大域変数なんて書いてあったっけ?

972 :デフォルトの名無しさん:02/11/10 06:02
>>967
なるほろ。じゃあ bar も NULL になる?

973 :947:02/11/10 06:02
>>965
intどころかもっと大きいサイズでもやってるかも。

974 :デフォルトの名無しさん:02/11/10 06:02
>>971
(゚Д゚)ハァ?

975 :デフォルトの名無しさん:02/11/10 06:03
>>972
そう。

976 :デフォルトの名無しさん:02/11/10 06:06
>>974
(;´Д`)ハァハァ

977 :デフォルトの名無しさん:02/11/10 06:07
でかい自動変数のdoubleの配列を0.0に初期化するときはループ使うのが一番てっとりばやい?

978 :デフォルトの名無しさん:02/11/10 06:08
>>976
(・∀・)

>>971
968 の話とグローバル変数かどうかが何で関係あるわけ?

979 :デフォルトの名無しさん:02/11/10 06:09
誰か次スレ頼むー!!

>>977
速さで言えば宣言の時に初期値指定した方が速い。

980 :デフォルトの名無しさん:02/11/10 06:10
配列は全て初期化されるんじゃなかった?

981 :デフォルトの名無しさん:02/11/10 06:10
>>978
968 は関係なかったね。hoge[1] 以降が 0 になるって話。

982 :デフォルトの名無しさん:02/11/10 06:12
>>979
でかい配列だから無理がある。

983 :デフォルトの名無しさん:02/11/10 06:12
>>980
マジ!?

984 :デフォルトの名無しさん:02/11/10 06:13
誰か次スレ頼むー!!

>>981
初期値が省略された要素は 0 で埋められる事が規格で決まっている。
グローバルかローカルかは関係無い。

985 :デフォルトの名無しさん:02/11/10 06:14
>>984
マジ知らなかった。スマソ

986 :デフォルトの名無しさん:02/11/10 06:14
>>984
int a[1024]={78,22,-2};とやったらa[3]以降は不定だったと思うけど、、、

987 :デフォルトの名無しさん:02/11/10 06:16
>>984
アセンブラ出力させたらそんなコード吐いてなかった。
スタックを確保してただけ。おれの処理系がダメなのか。

988 :デフォルトの名無しさん:02/11/10 06:17
新スレは
このスレの >>1のコピペでいいか?
それよければ漏れが立ててくるが。
このスレ、過去ログ情報がないね。

989 :985:02/11/10 06:17
>>984
まてぃ。試しにやってみたらやっぱ初期化されてないぞ!
うそつけ!

990 :デフォルトの名無しさん:02/11/10 06:17
>>988
訊という字を聞にしてほしい
あとはそのままでOK

991 :984:02/11/10 06:18
C99 だったカモー・・・

で、誰も次スレ立ててくれんのか?
漏れのホストでは立てられない。

992 :デフォルトの名無しさん:02/11/10 06:19
いちいち初期化していたら効率が悪くなるよ。
静的変数は一度だけ領域を確保するから初期化してもあまり問題ではないけど。

993 :デフォルトの名無しさん:02/11/10 06:19
俺も無理。
たてすぎだった。

994 :985:02/11/10 06:19
>>984
まてぃ
int hoge[100] = { 1 };
こうしたら、hoge[1] 以降は 0 に初期化されてた。
やっぱスマソ

995 :デフォルトの名無しさん:02/11/10 06:20
新スレ立てますた!

http://pc3.2ch.net/test/read.cgi/tech/1036876790/l50


996 :1:02/11/10 06:22
やっぱり3日もたなかったな。

997 :デフォルトの名無しさん:02/11/10 06:23
>>995
お疲れ!!
しかし、漏れのホストずっとスレ立てられないんだけど、何でだ・・・。
同じホストで乱立ヴァカがいるのか。

998 :デフォルトの名無しさん:02/11/10 06:23
   ∧∧
   /⌒ヽ)
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三

999 :デフォルトの名無しさん:02/11/10 06:23
   ||
 ∧||∧
(  ⌒ ヽ トゥトゥトゥマシェーリー
 ∪ 。ノ    トゥトゥトゥマシェーリー
  ∪∪

1000 :デフォルトの名無しさん:02/11/10 06:23
     ∧∧  ミ _ ドスッ
     (   ,,)┌─┴┴─┐
    /   つ  終 了.  |
  〜′ /´ └─┬┬─┘
   ∪ ∪      ││ _ε3

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

215 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)