暇人向け

C99 で保証されているのはどれ。マルチスレッドとかは考えません。

  1. char”を“signed char”に変えても、プログラムの挙動は変わらない
  2. int”を“signed int”に変えても、プログラムの挙動は変わらない
  3. ~0 == -1
  4. sizeof(32768) == sizeof(0x8000)
  5. ijk が符号なし整数型の変数のとき、(i << j) << ki << (j + k) は等価
  6. すべてのビットが 0 であるような int 型の値は、ゼロを表す
  7. すべてのビットが 0 であるような double 型の値は、ゼロを表す
  8. すべてのビットが 0 であるようなポインタ型の値は、ヌルポインタを表す
  9. 静的な変数を明示的に初期化しなかった場合は、すべてのビットが 0 に初期化される
  10. i が整数型の変数のとき、i == i
  11. d が実数型の変数のとき、d == d
  12. ij が整数型の変数のとき、i == j ならば ij は同一のビット表現を持つ
  13. de が実数型の変数のとき、d == e ならば de は同一のビット表現を持つ
  14. long で表現できて int では表現できないような整数値が存在する
  15. unsigned int で表現できて signed int では表現できないような整数値が存在する
  16. 1 ビットが 3 種類の値を保持できるようなアーキテクチャでは、unsigned char の最大値は 3CHAR_BIT - 1
  17. p が正しいポインタのとき、!(p < p)
  18. void *null = 0; と定義したとき、任意のポインタ p について、p != (void *)0 ならば p != null
  19. int *************p と宣言すると、pint 型への 13 重のポインタになる
  20. FILE * 型の式 E について、getc(E)(getc)(E) は等価
  21. 拡張子が“.cpp”のファイルを #include してもよい
  22. #if 'a' == 97 とそれに対応する #endif で囲まれた部分の中では、'a' == 97

答えはいつも規格書の中に。知らんけど。