C ユーザーズガイド

付録 C Sun C と ANSI C における -Xs オプションの相違点

この付録では、-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、longtypedef 宣言

許可する 

 

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 による型変換を許可しない (すべてのモード)