@komami_n int型が -32768~32767 を表せる環境で、単に -32768 と書くとlong型扱いになります。これは先に32768がlong型として処理されるためで、int型にしたい場合は -32767-1 のように書きます。
2014-08-01 22:57:19long 型が 32768 を表せる環境を想定しています。
@0presea0 char 型が 1byte であることは仕様として明確に定められていますが、1byte が 8bit であるかどうかは処理系定義です。さらに言うと、intなどの他の型の大きさが 1byte の整数倍である保障もありません。
2014-08-01 23:05:39@azardon sizeof 演算子で得られるbyte数は、実は切り上げられています。int型が12bit、1byteが8bitであるような環境ではsizeof(int)が2となるため、正確なbit数を求めたい場合は~0に対して立っているビットを数えるくらいしかありません。
2014-08-01 23:23:27こういう処理系が実在するのかは不明です。
@KasaP_d void* 型はどんな型でも代入できる汎用ポインタとしてよく知られており、K&R第2版にもそのように書かれています。しかし、JIS規格のJISX 3010を見てみると、void* と互換性のある型の中に、関数ポインタだけが書かれていません。
2014-08-01 23:29:16@naninunenosi 単項+演算子は何もしない演算子であると思われがちですが、実際には算術演算であるため整数拡張を伴います。たとえばchar型の変数cに対し、sizeof(c)とsizeof(+c)を比較してみると、多くの処理系で異なる値となります。
2014-08-01 23:37:33@sakumasu_drums ANSI Cにおいて、外部識別子の意味がある(区別可能な)先頭の文字数として保障しているのはわずか6文字です。つまり、先頭の6文字が同じである外部識別子は区別可能である保障がありません。これはC99で若干緩和され、31文字となりました。
2014-08-01 23:56:49@herauro 可変長引数関数では第2引数以降の仮引数の型を指定できないため、float型の変数を与えても暗黙の型変換によりdouble型となります。printf関数において、変数がfloat型であってもdouble型であっても同じ%fという書式設定なのは、このためです。
2014-08-02 00:14:42× 可変長引数関数では第2引数以降の仮引数の型を指定できない
○ 可変長引数関数では可変部分の仮引数の型を指定できない
@x2oVo2x ローカル変数以外の変数を、初期化子を使わずに宣言した場合、その変数は仮の定義となります。同じ変数に対して、仮の定義は何度行ってもかまいません。しかし、初期化子を使った(仮でない)定義は1度しか行えないため、2回以上初期化子を使った宣言をするとエラーとなります。
2014-08-02 00:56:33@meta_BE 文字定数を表す方法には、8進数で直接文字コードを指定する方法もあります。たとえば文字コー158の文字定数は、'\236' のように、\ の後ろに8進数を直接書きます。いわゆるヌル文字を表す '\0' というのは、この表記法を利用しています。
2014-08-02 01:40:52× 文字コー158
○ 文字コード158
@asxkyo_ ポインタの比較は、同じ配列内を指すポインタ同士でのみ正しい結果が保障されます。たとえばint a[5];のとき、&a[-1]や&a[6]を比較しても結果は保障されません。ただしこれには例外があり、最後の要素の1つ後ろ(&a[5])だけは比較結果が保障されます。
2014-08-02 02:16:03締め切ります。ふぁぼってくださった方、ありがとうございました。仕様に関して誤りがありましたら教えてください。「言っている意味が分からない」などに関しては、諦めてください。
2014-08-02 02:20:20@cooc2 締め切ってしまったので軽めのもので。 C言語の十進数の定義は、0以外で始まる、0~9を使った数のことです。つまりただの 0 は十進数ではありません。0 は八進数に分類されます。
2014-08-02 02:29:01舞台裏
そしてようやく全員分終了したところで……