简单代码的意外编译错误

Nai*_*rou 1 c visual-c++

在尝试编译库(flextGL)时,我遇到了一个奇怪的编译器错误(使用VC2010),这对我来说完全没有意义.

考虑以下最小C示例(test.c):

void a()
{
    // ...
}

int b()
{
    a();

    int c;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试在VC2010下编译它,我会收到以下错误:

test.c(10) : error C2143: syntax error : missing ';' before 'type'
Run Code Online (Sandbox Code Playgroud)

错误是指该int c;行.

经过一些实验,我发现了以下内容:

  • 如果我删除该int c;行,它编译得很好.
  • 如果我删除该a();行,它编译得很好.
  • 如果我将int c;线移到a();线上方,它编译得很好.
  • 如果我重命名要编译为C++而不是C(.cpp而不是.c)的文件,它编译得很好.

为什么会发生这种奇怪的错误?

我唯一的猜测是这是C的古老特征之一,其中所有变量都必须在函数的顶部声明.但我会认为现代编译器比这更聪明.

Jos*_*hua 5

你的猜测是正确的.

您在块中的非变量声明后声明了一个变量.Visual C++不实现C99,但只实现ANSI C,因此无法编译.