首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不存在必需的标志,则编译失败

如果不存在必需的标志,则编译失败
EN

Stack Overflow用户
提问于 2011-09-23 00:58:26
回答 2查看 560关注 0票数 12

我有一些遗留代码,需要传入特定的gcc标志。我可以为这些标志添加预处理器检查吗?

例如,假设我需要-fno-strict-aliasing,我可以这样做吗:

代码语言:javascript
复制
#ifndef _FNO_STRICT_ALIASING
   #error -fno-strict-aliasing is required!
#endif
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-23 01:12:16

您可以使用

代码语言:javascript
复制
#pragma GCC optimize "no-strict-aliasing"

使用该标志编译文件(覆盖在命令行中指定的内容)。您还可以使用

代码语言:javascript
复制
__attribute__((optimize("no-strict-aliasing")))

要将该标志应用于源文件中的单个函数...

票数 6
EN

Stack Overflow用户

发布于 2011-09-23 01:21:49

绝对没有#定义,至少在我的GCC版本上是这样。

要查看所有预定义的预处理器符号:

代码语言:javascript
复制
g++ -dM -E - < /dev/null

我不认为有任何方法来测试这些选项。但是,如果您使用的是GCC 4.4或更高版本,则可以使用"optimize" function attribute"optimize" #pragma来启用针对每个函数或每个文件的特定选项。

例如,如果将以下代码添加到公共头文件中:

代码语言:javascript
复制
#if defined(__GNUC__)
#pragma GCC optimize ("no-strict-aliasing")
#else
#error "You are not using GCC"
#endif

...it应该为包含头文件的每个文件启用该选项。

更新

好的,我花了大约10分钟才写出这个答案。无论如何,我将把它留在这里,以获得指向GCC文档的链接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7518597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档