我有一些遗留代码需要传递某些gcc标志。我可以为这些标志添加预处理器检查吗?
例如,假设我需要-fno-strict-aliasing
,我能否像下面这样做:
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
我有一些遗留代码需要传递某些gcc标志。我可以为这些标志添加预处理器检查吗?
例如,假设我需要-fno-strict-aliasing
,我能否像下面这样做:
#ifndef _FNO_STRICT_ALIASING
#error -fno-strict-aliasing is required!
#endif
您可以使用
#pragma GCC optimize "no-strict-aliasing"
使用该标志编译文件(覆盖命令行中指定的内容)。 您还可以使用
__attribute__((optimize("no-strict-aliasing")))
在源文件中将标志应用于单个函数...
在我的GCC版本中,这绝对没有#定义。
要查看所有预定义的预处理器符号:
g++ -dM -E - < /dev/null
我认为没有任何方法可以测试这些选项。但是,如果您使用的是GCC 4.4或更高版本,则可以使用"optimize"函数属性或"#pragma optimize"在每个函数或每个文件的基础上启用特定选项。
例如,如果您将此添加到公共标头文件中:
#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif
我希望它能够为包括头文件的每个文件启用该选项。
[更新]
好吧,我用了大约10分钟才写完这个答案。我还是会把它留在这里,因为里面有指向GCC文档的链接。