この付録では、-Xs オプションを使用した場合のコンパイラ動作の相違を説明します。 -Xs オプションは Sun C 1.0、Sun C 1.1 (K&R 形式) に準拠しようとしますが、失敗する場合もあります。
表 C-1 -Xs 動作
データ型 |
Sun C (K&R) |
Sun ANSI C (5.2) |
---|---|---|
集合体の初期化 struct { int a[3]; int b; } w[]={{1},2}; |
sizeof(w)=16 w[0].a=1,0,0 w[0].b=2 |
sizeof(w)=32 w[0].a=1,0,0 w[0].b=0 w[1].a=2,0,0 w[1].b=0 |
不完全な構造体、共用体、列挙型の宣言 |
struct fq { int i; struct unknown; }; |
不完全な構造体、共用体、列挙型の宣言はできない |
switch 文の式の汎整数型 |
非汎整数型を許可する |
非汎整数型を許可しない |
優先順位 |
if (rcount > count += index) を許可する |
if (rcount > count += index) を許可しない |
unsigned、short、long の typedef 宣言 |
許可する
typedef short small unsigned small; |
許可しない (すべてのモード) |
入れ子にされた構造体または共用体の宣言における構造体または共用体のタグ不一致 |
タグ不一致を許可する struct x { int i; } s1; /* K&R では構造体として扱う */ { union x s2; } |
入れ子にされた構造体または共用体の宣言におけるタグ不一致を許可しない |
不完全な構造体型または共用体型 |
不完全な型の宣言を無視する |
struct x { int i; } s1; main() { struct x; struct y { struct x f1; /* K&R では、f1 は外部の */ /* 構造体を参照する */ } s2; struct x { int i; }; } |
lvalue における cast による型変換 |
許可する
(char *) ip = &foo; |
lvalue における cast による型変換を許可しない (すべてのモード) |