D言語の勉強をしながら、同時にCやC++言語との比較もやっています。dmdコンパイラもgdcコンパイラも問題なく動きますが、gccコンパイラでテストしたところ、ブール値のデフォルト初期化子であるGCCコンパイラのバグらしきものが見つかりました。次のコードを参照してください。
C++ コード
#include <iostream>
using namespace std;
int main()
{
bool b;
cout << b << endl;
return 0;
}
G++ コンパイラ (gcc バージョン 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1):
g++ -Wall -pedantic test.cpp
test.cpp: In function ‘int main()’: test.cpp:7: warning: ‘b’ is used
uninitialized in this function
./a.out 64
C コード (foo.c):
#include <stdio.h>
#include <stdbool.h>
#define bool _Bool
int main(int argc, char * args[])
{
bool b;
printf("%d\n", b);
return 0;
}
gcc コンパイラ
gcc-4.6 -Wall -pedantic a.c
foo.c: In function ‘main’:
foo.c:9:8: warning: ‘b’ is used uninitialized in this function [-Wuninitialized]
./a.out
64
tcc コンパイラ
tcc -Wall foo.c
./a.out
0
クランコンパイラ
clang -Wall -pedantic foo.c
./a.out
0
誰かがgccの動作を説明できますか?