コードに振る舞う:初期化されていない_Bool変数または構造体のフィールドは以下の妙
_Bool field0;
char field1;
printf("fieldX: [%d]\t[%d]\n", field0, field1);
printf("fieldX ? 1 : 0: [%d]\t[%d]\n", field0 ? 1 : 0, field1 ? 1 : 0);
printf("!fieldX: [%d]\t[%d]\n", !field0, !field1);
printf("!!fieldX: [%d]\t[%d]\n", !!field0, !!field1);
を次のような出力が得られます。
fieldX: [165] [165] fieldX ? 1 : 0: [165] [1] !fieldX: [164] [0] !!fieldX: [165] [1]
は非常に驚くべき、特に三項演算結果を検索します。
gcc 4.9.3および4.8.3、-O0、no -fltoでチェック。
備考:スタックは0xa5パターン(埋め込みC環境)で事前に初期化されています。
自動ストレージを持つオブジェクトへのアクセス未定義の動作を呼び出します。ここには奇妙なことはありません。 – ouah
@ouah - あなたはそのコメントで 'uninitialized'を見逃しますか? – 4386427
["未定義の振る舞い"は実際に\ *何でも\ *を起こすことができますか?](http://stackoverflow.com/questions/32132574/does-undefined-behavior-really-permit-anything-to-happen) – kaylum