スタックオーバーフローに関する実行時検査を追加し、ローカル変数を初期化します。
o には、次のいずれかを指定します。
表 B–19 -xcheck のフラグ| フラグ | 意味 | 
|---|---|
| %none | -xcheck のチェックを実行しません。 | 
| %all | -xcheck のチェックをすべて実行します。 | 
| stkovf | スタックオーバーフロー検査を有効にします。-xcheck=stkovf を指定すると、シングルスレッドのプログラム内のメインスレッドのスタックオーバーフローおよびマルチスレッドプログラム内のスレーブスレッドのスタックに対する実行時検査が追加されます。スタックオーバーフローが検出された場合は、SIGSEGV が生成されます。アプリケーションで、スタックオーバーフローで生成される SIGSEGV をほかのアドレス空間違反と異なる方法で処理する必要がある場合は、sigaltstack(2) を参照してください。 | 
| no%stkovf | スタックオーバーフローのチェックをオフにします。 | 
| init_local | ローカル変数を初期化します。詳細は、次の説明を参照してください。 | 
| no%init_local | ローカル変数を初期化しません。 | 
-xcheck を指定しない場合は、コンパイラではデフォルトで -xcheck=%none が指定されます。引数を指定せずに xcheck を使用した場合は、コンパイラではデフォルトで -xcheck=%all が指定されます。
-xcheck オプションは、コマンド行で累積されません。コンパイラは、コマンドで最後に指定したものに従ってフラグを設定します。
—xcheck=init_local を指定すると、次の表に示すように、コンパイラは初期設定子を指定しないで宣言されたローカル変数を事前定義された値に初期化します (これらの値は変更される可能性があるため、信頼しないでください)。
| 種類 | 初期化値 | 
|---|---|
| char, _Bool | 0x85 | 
| short | 0x8001 | 
| int, long, enum (-m32) | 0xff80002b | 
| long (-m64) | 0xfff00031ff800033 | 
| long long | 0xfff00031ff800033 | 
| pointer | 0x00000001 (-m32) 0x0000000000000001 (-m64) | 
| float, float _Imaginary | 0xff800001 | 
| float _Complex | 0xff80000fff800011 | 
| double | SPARC: 0xfff00003ff800005 x86: 0xfff00005ff800003 | 
| double _Imaginary | 0xfff00013ff800015 | 
| long double, long double _Imaginary | SPARC: 0xffff0007ff800009 / 0xfff0000bff80000d x86: 12 bytes (-m32): 0x80000009ff800005 / 0x0000ffff x86 - 16 bytes (-m64): 0x80000009ff800005 / 0x0000ffff00000000 | 
| double _Complex | 0xfff00013ff800015 / 0xfff00017ff800019 | 
| long double _Complex | SPARC: 0xffff001bff80001d / 0xfff0001fff800021 / 0xffff0023ff800025 / 0xfff00027ff800029 x86 - 12 bytes (-m32): 0x7fffb01bff80001d / 0x00007fff / 0x7fffb023ff800025 / 0x00007fff x86 - 16 bytes (-m64): 0x00007fff00080000 / 0x1b1d1f2100000000 / 0x00007fff00080000 / 0x2927252300000000 | 
計算された goto で使用するために宣言されたローカル変数 (単純な void * ポインタ) は、上の表に示されたポインタの説明に従って初期化されます。
ローカル変数の型である修飾された const、register、計算された goto のラベル番号、ローカルラベル、可変長配列 (VLA) は初期化されません。
基本型である struct のフィールドは、union の最初に宣言された pointer または float フィールドのように、上の表で説明されているとおりに初期化されます。この結果、未初期化の参照により目に見えるエラーが生成される可能性が最大になります。
配列要素も上の表で説明されているとおりに初期化されます。
入れ子の struct、union、配列フィールドは、ビットフィールドを含む struct、pointer または float フィールドのない union、または完全に初期化できない型の配列を除いて、上で説明されているとおりに初期化されます。これらは、double 型のローカル変数に使用される値を使用して初期化されます。可変長配列は初期化されません。