我正在讲授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
答案 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;
^~~