GCC #pragma 或命令选项

GCC #pragma or command options

如果编译器有一些命令行标志并且代码中有一些与这些标志不兼容的编译指示,将使用哪一个?

更清楚:我正在编译 g++ -g -O2 -std=gnu++17 -static {files} – GCC 版本 g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0.

如果我在代码中写#pragma GCC optimize("Ofast"),最终代码会用-O2编译还是用-Ofast编译?

这取决于它是高于还是低于 pragma。

void this_will_be_compiled_with_O2() { stuff(); }

#pragma GCC optimize("Ofast")

void this_will_be_compiled_with_Ofast() { stuff(); }

虽然在 the documentation 中没有明确地 提及,#pragma GCC reset_options 指令的描述 暗示 任何 #pragma GCC optimize 指令将覆盖命令行选项:

#pragma GCC reset_options

    This pragma clears the current #pragma GCC target and #pragma GCC optimize to use the default switches as specified on the command line.