使用-std = c11标志编译部分代码

时间:2018-08-14 08:46:43

标签: c eclipse gcc

是否可以用不同的标志编译代码的一部分-无需更改makefile中的标志?

我有一个尚未为-std = c11设置的现有项目。现在,我添加了自己的代码,编译器告诉我

'for' loop initial declarations are only allowed in C99 or C11 mode

当我将标志更改为std = c11或c99时,程序的其余部分将不再编译。

在C ++中是否有类似extern "C" {}的内容告诉编译器将以下部分视为std = c11?

谢谢

2 个答案:

答案 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(); } }