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.
如果编译器有一些命令行标志并且代码中有一些与这些标志不兼容的编译指示,将使用哪一个?
更清楚:我正在编译 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.