【问题标题】:GCC #pragma or command optionsGCC #pragma 或命令选项
【发布时间】:2022-01-02 17:16:02
【问题描述】:

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

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

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

【问题讨论】:

  • 该编译指示仅对当前translation unit 是本地的,不会影响任何其他翻译单元。

标签: c++ gcc g++ pragma


【解决方案1】:

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

void this_will_be_compiled_with_O2() { stuff(); }

#pragma GCC optimize("Ofast")

void this_will_be_compiled_with_Ofast() { stuff(); }

【讨论】:

    【解决方案2】:

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

    #pragma GCC reset_options

    此 pragma 清除当前的 #pragma GCC target#pragma GCC optimize 以使用命令行中指定的默认开关。

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2013-10-23
      相关资源
      最近更新 更多