仅为 ISO C99 模式设置代码块

Set CodeBlocks for ISO C99 mode only

如何设置我的编译器只允许编译在 ISO C99 模式下编写的代码?

我做了以下事情:

项目 -> 属性 -> 项目的构建选项 -> 这里我选择了 ISO C99

然而,当我尝试编译时:

#include <stdio.h>
int main()
{
    for(int i=0;i<5;i++)
        printf("%d",i);
    return 0;
}

我没有收到任何警告, 我应该得到警告:

for loop declarations are not allowed in C99 mode.

你能帮我解决这个问题吗?

现在我收到警告

'for' loop initial declarations are only allowed in C99 or C11 mode

问题是这在C90模式下是不允许的,而在C99模式下是允许的。

C99 确实支持在 for-loop 的迭代语句中声明变量。参考C99标准的6.8.5:

iteration-statement:

while ( expression ) statement

do statement while ( expression ) ;

for ( expressionopt ; expressionopt ; expressionopt ) statement

for ( declaration expression opt ; expressionopt ) statement

6.8.5.3 进一步阐明了在for-loop 迭代子句中声明的变量的作用域:

The statement

for ( clause-1 ; expression-2 ; expression-3 ) statement

behaves as follows: The expression expression-2 is the controlling expression that is evaluated before each execution of the loop body. The expression expression-3 is evaluated as a void expression after each execution of the loop body. If clause-1 is a declaration, the scope of any variables it declares is the remainder of the declaration and the entire loop, including the other two expressions; it is reached in the order of execution before the first evaluation of the controlling expression. If clause-1 is an expression, it is evaluated as a void expression before the first evaluation of the controlling expression.

GNU GCC 使用以下检查语法是否符合 C99 标准

-std=c99 -pedantic

发出严格的 ISO C99 标准要求的所有警告。

然而,https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Warning-Options.html提到:

一些用户尝试使用 -pedantic 来检查程序是否严格符合 ISO C。他们很快发现它并没有完全按照他们的意愿行事:它找到了一些 non-ISO 实践,但不是全部 — 只有 ISO C 需要诊断的那些,以及已添加诊断的其他一些实践。

报告任何不符合 ISO C 的情况的功能在某些情况下可能有用,但需要大量的额外工作 并且与 -pedantic 完全不同。我们近期没有支持此类功能的计划。

假设您的程序名为 main.c(使用您给出的示例代码),您可以从 shell 终端

使用以下命令

gcc -o main -std=c99 -pedantic main.c