【发布时间】:2019-01-24 06:34:27
【问题描述】:
我正在做一个关于 C 历史的讲座,并想展示一些过去不可能但现在已经不可能的习语(特别是在块的中间定义变量)。我想表明旧的 C 编译器不会编译它。
gcc 具有用于设置语言标准的-std= 选项。不幸的是,将其设置为 -std=c89 不会在块中间定义变量时产生编译错误。
我希望有一个更准确的标准版本(即 - -std=knr),但我找不到任何这样的选项。
我错过了什么吗?这是 GCC 中的错误吗?
gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0
错误编译的代码:
#include <stdio.h>
int main(argc, argv)
int argc;
char *argv[];
{
printf("Hello, world\n");
int a;
return 0;
}
【问题讨论】:
-
谢谢。这不是答案有什么原因吗?
-
您为什么要使用像 Ubuntu 8 这样的现代系统?你不应该使用旧的吗?
-
@JonathanLeffler 如果可行,则不会。我不是想效仿过去的日子(并不是说有很多方法可以做到),只是展示事情的样子。