OpenMP指令如何由编译器处理

  1. 我想知道编译器如何处理OpenMP指令,比如gcc?
  2. 例如,在此代码中

    int main(int argc, char *argv[]) { #pragma omp parallel printf("Hello, world.\n"); return 0; } 

    gcc的预处理器是否通过将OpenMP指令替换为其他代码来修改C代​​码?

    在预处理之后和组装之前的代码是什么?

感谢致敬!

您可以进行网络搜索并查找讨论该主题的论文。 我讨厌提供链接,因为它们会不断变化,但在这种情况下,这是回答问题的最简单方法。 以下是您可以看到的两个:

来自另一个世界的东西(或者:OpenMP编译器如何工作?第1部分),Michael Klemm

Barbara Chapman如何编译OpenMP

希望这会回答你的问题。

我不知道第一手资料,但GCC(或任何编译器)在遇到这些编译指令时不太可能对代码进行预处理。 最有可能的是,GCC将在内部标记该块,然后生成适当的本机代码。 没有中间C ++代码。