2

我正在从一本书中阅读 C 编程,这本书说所有变量都必须在函数的开头声明。我尝试了以下代码,但没有发出任何错误。我正在使用 mingw 和代码块。代码如下:

#include <stdio.h>

int main()
{
    int i=10;
    printf("%d\n",i);

    int j=20;
    printf("%d\n",j);

    return 0;
}

我是否必须更改任何编译器设置或其他东西以使其与书中给出的标准兼容?

我正在使用 -std=c89 编译器选项。请参阅下面的编译消息:

-------------- Clean: Debug in HelloWorld (compiler: GNU GCC Compiler)---------------

Cleaned "HelloWorld - Debug"

-------------- Build: Debug in HelloWorld (compiler: GNU GCC Compiler)---------------

mingw32-gcc.exe -Wall -std=c89  -g     -c D:\MyCodeBlocksProjects\HelloWorld\main.c -o     obj\Debug\main.o
mingw32-g++.exe  -o bin\Debug\HelloWorld.exe obj\Debug\main.o    
Output size is 68.53 KB
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings (0 minutes, 0 seconds)
4

1 回答 1

3

所有变量都必须在函数的开头声明。

准确地说,它们必须在block的开头声明。这仅在 C89 中是正确的。C99 已取消此限制。因此,您可以将编译器更改为严格的 C89 模式。例如,对于 GCC,它是-std=c89可选的。要获得标准要求的所有诊断,您还应该指定选项-pedantic

为了说明我在 block 开头的意思,这是合法的 C89 语法:

void foo()
{
    int x = 1;
    x = x + 1;
    {
        int y = 42;  /**OK: declaration in the beginning of a block*/
    }
}
于 2013-11-03T05:01:47.170 回答