1

我很难理解为什么在尝试编译时会在以下代码中出错:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    puts("");
    int i = 0;

    return 0;
}

如果我注释掉puts("");,它将编译。

我正在使用Visual Studio,并将其编译为 C 代码,使用/TC.

4

2 回答 2

8

Visual Studio C 有点过时并使用C89

对于 C89,您必须在作用域块的开头声明所有变量

对于上面的代码,这应该可以

int main()
{
    int i = 0;
    puts("");
    return 0;
}

请注意,您还可以执行以下操作

int main()
{
    puts("");
    {
        int i = 0;
    }
    return 0;
}
于 2013-09-18T11:08:59.693 回答
1

我认为您使用的是较旧的 C 标准 C89。

C89 标准不允许在某些函数调用后声明变量。所有变量声明都应该在范围块的开头(谢谢,Gearoid Murphy)。

于 2013-09-18T11:09:46.313 回答