ANSI-C仕様で"不定である"とか"処理系依存である"とか "定義されていない"とか書かれているものを集めたドキュメント
(*1)ポインタを含む変換として, このsectionでは
(*2) char型のオブジェクトでは, 厳密な整合の要求はもっとも少ない. ポインタをvoid*に変換して, そこから変更なしに戻すことも可能.
仮引数に型を明示しないスタイル. ちなみに, gcc-2.95.3では
/* Test of old style function declaration */ #includeは通ります./* Old style declaration */ int f(x, y); int main(int argc, char** argv) { printf("Calling f\n"); f("Hello", 4, 5); return 0; } int f(int x, int y) { printf("f was called\n"); printf("%d\n", x + 3); return 0; }
じゃあ, Pが配列の最後から一つ前の要素を指すときの(P + 2) - Pは?
K&Rには, 注として「ビットフィールドを格納するためのこの言語規則は 無条件に"処理系依存"と読むことをおすすめする」とか「この方法は, メモリのレイアウトをビットレベルで記述する移植不可能な方法として 使うことができる」とか書かれている.
たとえば
#define cat(x, y) x ## yとかしたとき
cat(cat(1, 2), 3)は不定.
#include <...>で, ファイル名のところに", ', \, \*のいずれかが含まれていると, その効果は不定である.
#include "..."で, ファイル名の中に', \, \*のいずれかが含まれていると, その効果は不定である.
#include ...という形は, 結果として<...>か"..."のうち一つが生成され, それが上に書いたように扱われる.
#pragma ...は, 処理系に依存する行動をプリプロセッサにとらせるためのものである. 認識できないプラグマは無視される.