我在试图编译库(flextGL)时遇到了一个奇怪的编译器错误(使用VC2010),这对我来说完全没有意义。
考虑以下最小C示例(test.c
):
void a()
{
// ...
}
int b()
{
a();
int c;
return 0;
}
如果我尝试在VC2010下编译此文件,将得到以下错误:
test.c(10) : error C2143: syntax error : missing ';' before 'type'
错误是指
int c;
行。经过一番试验,我还发现了以下几点:
如果删除
int c;
行,它编译得很好。如果删除
a();
行,它编译得很好。如果我将
int c;
行移到a();
行之上,它编译得很好。如果我重命名要编译为C++的文件而不是C(
.cpp
而不是.c
),它编译得很好。为什么会发生这种奇怪的错误?
我唯一的猜测是这是C的一个古老特性,所有变量都必须在函数的顶部声明但我会认为现代编译器比这更聪明。
最佳答案
你的猜测是正确的。
在块中的非变量声明之后声明了变量Visual C++没有实现C99,而是只实现ANSI C,这样就不编译了。
关于c - 平凡的代码出现意外的编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7356410/