- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
191 :名無しさん@そうだ選挙に行こう[sage]:2014/12/14(日) 08:25:23.41 ID:qF8SNqwq - >>174
>int型に引き渡しても問題ないという感覚ですか? 理由が3つ。 一つはその通りです。 二つ目は、C標準関数にはcharの代替でintを用いる関数があるため それに合わせたと考えられます。 すべてのchar値に加えEOFなど特別な値も表現させるためです。 三つ目は、printfなどの可変個引数の関数に渡す際には 自動的にintに変換されて渡されるため それに何となく合わせたのだと思われます。 しかしここで少し問題があります。 charが符号付きの処理系ではそのままintに変換すると C標準ライブラリでの文字のint表現と互換のない表現になります。 例えば char ch = (char)'\xFF'; //0b1111'1111(マイナス1) はintにすると ~0 // 0b11111'1111'…1'11111'1111(マイナス1) になりますが、これはfgetcなどの表現0x000000FF(255)と違うのです。 これはstr_char内部でstr[i]==cを評価する際のstr[i]に合わせたものですが、 あまり使われる表現ではありません。 まあ間違いではないと思います。
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
199 :名無しさん@そうだ選挙に行こう[sage]:2014/12/14(日) 14:41:03.55 ID:qF8SNqwq - >>189
どうでもよいけれど × printf("%d\n", sizeof('a')); // 未定義動作 ○ printf("%zu\n", sizeof('a'));
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
206 :デフォルトの名無しさん[sage]:2014/12/14(日) 20:43:09.83 ID:qF8SNqwq - 【制限】「sizeof(type)」が32767を超える処理系では使わないでください
例: struct s {char x[1024LL*1024*1024*2]}; printf("%d", (int)sizeof(struct s));//oops...
|