是否可以用不同的标志编译代码的一部分-无需更改makefile中的标志?
我有一个尚未为-std = c11设置的现有项目。现在,我添加了自己的代码,编译器告诉我
'for' loop initial declarations are only allowed in C99 or C11 mode
当我将标志更改为std = c11或c99时,程序的其余部分将不再编译。
在C ++中是否有类似extern "C" {}
的内容告诉编译器将以下部分视为std = c11?
谢谢
答案 0 :(得分:2)
据我所知,您不能在本地设置编译器选项。但是,您可以使用diagnostic pragmas在本地禁用虚假警告。
但是,执行此操作的最佳方法可能是将C99 / C11代码隔离在单独的.c文件中,然后将其与项目的其余部分分开编译,然后再将它们链接在一起。
答案 1 :(得分:1)
我认为不存在对本地强制-std=c99
/ -std=c11
的实用性(即使您可以对其他一些选项进行等效操作,例如-On
选项),但是即使在C90中,您几乎也可以有一个for-loop-local初始化声明,而没有太多的语法中断。只需将for循环括在花括号中,然后在其中放置声明即可:{ int i=0; for(;i<5;i++){ something(); } }