首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在代码中本地化g++编译选项

在代码中本地化g++编译选项
EN

Stack Overflow用户
提问于 2015-08-28 15:55:16
回答 2查看 460关注 0票数 2

我正在寻找一种简单的方法来本地化特定的g++ (g++-4.9,具体而言),将选项编译到某些代码行或至少是目标函数。总的来说,我感兴趣的是-fast-math-ffinite-math-only-fno-signed-zeros选项。

我假设使用*.cpp实用程序可以在make文件级别上进行本地化,但我希望有一种方法可以在代码本身中启用它,通过#实用化或__attribute__之类的方法。我希望这样做不仅是为了最小化对外部文件的依赖(即不正确的makefile风险),而且希望能够将某些FP行为过度定位到函数中的特定方程。

或者,如果无法通过内联指令本地化FP行为,那么如果在项目构建中没有启用所需的编译器指令(例如,makefile丢失或不适当地修改),我可以做些什么来至少触发编译时错误。

我假设这种内联优化可能是编译器特定的,在本例中是g++,但这是我愿意采取的折衷方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-28 16:26:47

gcc中,您可以使用功能属性 optimize

代码语言:javascript
复制
void f () __attribute__ ((optimize("fast-math"), optimize("finite-math-only"), optimize("no-signed-zeros")));
票数 6
EN

Stack Overflow用户

发布于 2015-08-28 16:22:07

您可能可以在函数属性中使用fpmath选项打开其中的一些部分,但从文档中我并不清楚这一点。有鉴于此,我将把重点放在侦查上:

-fast-math已经打开了-ffinite-math-only,所以您不需要担心这个问题。-fast-math的文档说:

此选项将导致定义预处理宏FAST_MATH

这意味着它可以通过

代码语言:javascript
复制
#ifndef __FAST_MATH__
#error "The -fast-math compiler option is required"
#endif

我还没有找到一种编译时检测-fno-signed-zeros存在的方法。

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

https://stackoverflow.com/questions/32275114

复制
相关文章

相似问题

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