我有一些传统代码需要传入某些gcc标志。我可以为这些标志添加预处理器检查吗?
例如,假设我需要-fno-strict-aliasing
,我可以这样做:
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
答案 0 :(得分:6)
您可以使用
#pragma GCC optimize "no-strict-aliasing"
使用该标志编译文件(覆盖命令行中指定的内容)。 您也可以使用
__attribute__((optimize("no-strict-aliasing")))
将标志应用于源文件中的单个函数...
答案 1 :(得分:3)
肯定没有#define,至少在我的GCC版本上。
要查看所有预定义的预处理器符号:
g++ -dM -E - < /dev/null
我认为没有办法测试这些选项。但是,如果您使用的是GCC 4.4或更高版本,则可以使用"optimize" function attribute或"optimize" #pragma在每个功能或每个文件的基础上启用特定选项。
例如,如果将其添加到公共头文件中:
#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif
...它应该为包含标题的每个文件启用该选项。
[更新]
好的,所以我花了大约10分钟才能写出这个答案。无论如何,我将把它留在这里,以获得GCC文档的链接。