当声明一个变量或指针时,编译器假定变量或指针本身在声明期间被赋值时已经被声明。
我已经尝试过 gcc 和 clang,它们编译“错误”代码时没有提示。
情况 1:由于未声明“a”,因此无法编译:
void main()
{
int b=sizeof(a);
}
案例 2:编译没有问题:
void main()
{
int a=sizeof(a);
}
编译器是否应该生成“a is undeclared”错误,就像情况 1 一样?
最佳答案
Shouldn't the compiler generate the "a is undeclared" error instead, just like in case 1?
为什么?它只是看到您声明了 a
。
int a = sizeof(a);
// ^--- here it is, before its first use
变量的声明在看到它的声明符之后开始,就在它的(可选的)初始值设定项之前。所以你甚至可以写出真正有问题的
int a = a;
但是请注意,在您的情况下,没有任何错误。 sizeof
的结果只取决于a
的类型,而且类型是已知的。这是一个定义明确的初始化(从 size_t
到 int
的转换,但不需要担心)。
关于c - 编译器未正确检查变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506747/