我正在讲述C的历史,并希望展示一些过去不可能的习语,但现在(特别是在块的中间定义变量).我想表明较旧的C编译器不会编译它.
gcc可以-std=选择设置语言标准.不幸的是,设置它-std=c89不会在块中间定义变量时产生编译错误.
我希望有一个更准确的标准版本(即 - -std=knr),但我找不到任何这样的选项.
我错过了什么吗?这是GCC中的错误吗?
gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0
Run Code Online (Sandbox Code Playgroud)
错误编译的代码:
#include <stdio.h>
int main(argc, argv)
int argc;
char *argv[];
{
printf("Hello, world\n");
int a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个真正严格的-std标志符合,它应该伴随着-pedantic-errors旗帜.
作为演示,带有这些标志的wandbox上的代码会产生:
prog.c: In function 'main':
prog.c:9:9: error: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
int a;
^~~
Run Code Online (Sandbox Code Playgroud)