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

Localize g++ compile options within code

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

我认为 make 实用程序可以在 *.cpp 文件级别进行本地化,但我希望有一种方法可以通过 #pragma 或 [=24 在代码本身中启用它=] 之类的。我想这样做不仅是为了最大限度地减少对外部文件的依赖性(即不正确 makefile 的风险),而且希望将某些 FP 行为超本地化到函数内的特定方程式。

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

我假设这种内联优化可能是特定于编译器的,在这种情况下是 g++,但这是我愿意接受的妥协。

您可以使用函数属性中的 fpmath 选项打开其中的某些部分,但我从文档中不清楚这一点。鉴于此,我将专注于检测:

-fast-math 已经开启 -ffinite-math-only,因此您无需担心。 -fast-math 的文档说:

This option causes the preprocessor macro FAST_MATH to be defined.

也就是说可以通过

检测到
#ifndef __FAST_MATH__
#error "The -fast-math compiler option is required"
#endif

我还没有找到一种编译时方法来检测 -fno-signed-zeros

的存在

gcc中你可以使用function attribute optimize:

void f () __attribute__ ((optimize("fast-math"), optimize("finite-math-only"), optimize("no-signed-zeros")));

我不确定您是否正确使用了 "localize" 这个词。 Localization 与使软件适应不同人类语言(法语、俄语、汉语...)的用户有关

也许您想要求编译器使用其他优化标志优化某些 函数。

这可以使用 #pragma GCC optimize etc... or using some function attributes