我正在研究 D 语言并同时与 C 和 C++ 语言进行比较。它在 dmd 和 gdc 编译器上都可以正常工作,但是当我在 gcc 编译器上测试时,我发现一个看起来像 GCC 编译器的错误的东西,布尔的默认初始化程序键入而不是 0/false 请参见以下代码:
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 的行为吗?