我正在寻找一种简单的方法来本地化特定的g++ (g++-4.9,具体而言),将选项编译到某些代码行或至少是目标函数。总的来说,我感兴趣的是-fast-math、-ffinite-math-only和-fno-signed-zeros选项。
我假设使用*.cpp实用程序可以在make文件级别上进行本地化,但我希望有一种方法可以在代码本身中启用它,通过#实用化或__attribute__之类的方法。我希望这样做不仅是为了最小化对外部文件的依赖(即不正确的makefile风险),而且希望能够将某些FP行为过度定位到函数中的特定方程。
或者,如果无法通过内联指令本地化FP行为,那么如果在项目构建中没有启用所需的编译器指令(例如,makefile丢失或不适当地修改),我可以做些什么来至少触发编译时错误。
我假设这种内联优化可能是编译器特定的,在本例中是g++,但这是我愿意采取的折衷方案。
发布于 2015-08-28 16:26:47
在gcc中,您可以使用功能属性 optimize
void f () __attribute__ ((optimize("fast-math"), optimize("finite-math-only"), optimize("no-signed-zeros")));发布于 2015-08-28 16:22:07
您可能可以在函数属性中使用fpmath选项打开其中的一些部分,但从文档中我并不清楚这一点。有鉴于此,我将把重点放在侦查上:
-fast-math已经打开了-ffinite-math-only,所以您不需要担心这个问题。-fast-math的文档说:
此选项将导致定义预处理宏FAST_MATH。
这意味着它可以通过
#ifndef __FAST_MATH__
#error "The -fast-math compiler option is required"
#endif我还没有找到一种编译时检测-fno-signed-zeros存在的方法。
https://stackoverflow.com/questions/32275114
复制相似问题