c - 编译器未正确检查变量声明

标签 c

当声明一个变量或指针时,编译器假定变量或指针本身在声明期间被赋值时已经被声明。

我已经尝试过 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_tint 的转换,但不需要担心)。

关于c - 编译器未正确检查变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506747/

相关文章:

c - 大小为 LONG_MAX 的数组

c - C 中的链表程序错误

c - strtof() 在 C 中产生奇怪的结果

c - numa_alloc_onnode() 分配的内存多于它所能分配的内存吗?

c - 当变量定义为静态但声明为外部时没有警告或错误指示

c - C中的字符串按字母顺序逆序排列

c - 如果一个函数调用自己是 TRIVIALLY,它是递归的吗

c++ - 错误编译器,无法将参数 2 从 MyStruct1 转换为 const void*,用于 memcpy

c++ - 是否有调试器可以让我通过代码向后退一步?

c - C中的二进制除法