告诉gcc在C99之前的模式下无法编译

时间:2019-01-24 06:34:27

标签: c gcc

我正在讲授C的历史,并想展示一些曾经是不可能的但现在却是成语的习惯用法(特别是在块中间定义变量)。我想证明旧的C编译器不会编译它。

let a = `<p>Hello there</p><p>How r you?</p> <h1>Thank you</h1>` let b = a.split(/<[a-zA-Z0-9]*>([^<.*>;]*)<\/[a-zA-Z0-9]*>/gmi).filter(x=>x.trim() !== '') console.log(b) //['Hello there', 'How r you?', 'Thank you'] 具有gcc选项,用于设置语言标准。不幸的是,将其设置为-std=不会在块中间定义变量时产生编译错误。

我希望获得更准确的std版本(即--std=c89),但找不到任何此类选项。

我想念什么吗?这是GCC中的错误吗?

-std=knr

错误编译的代码:

gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0

1 个答案:

答案 0 :(得分:5)

如果您想真正严格遵守-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;
         ^~~