在#define中使用openmp pragma

时间:2011-07-08 16:26:09

标签: c macros openmp c-preprocessor pragma

  

可能重复:
  C/C++ pragma in define macro
  Conditional “pragma omp”

如何在宏定义中使用OpenMP pragma? E.g。

#define A() { \
 ...a lot of code... \
 #pragma omp for     \
 for(..)             \
  ..do_for..         \
 ...another a lot of code \
 }

3 个答案:

答案 0 :(得分:3)

在这里回答Conditional "pragma omp"

  

C99具有_Pragma关键字,允许您在宏中放置#pragma。像

这样的东西
  #define OMP_PARA_INTERNAL _Pragma("omp parallel for")

所以,

#define OMP_PARA_FOR _Pragma("omp for")
#define A() { \
 ...a lot of code... \
 OMP_PARA_FOR     \
 for(..)             \
  ..do_for..         \
 ...another a lot of code \
 }

可以将几个_Pragma组合为一元运算符,例如:

_Pragma("first pragma") _Pragma("Second pragma")

答案 1 :(得分:2)

在Visual Studio上,您可以使用__pragma关键字而不是#pragma。不幸的是,这是非标准的,所以你必须弄清楚你的编译器是否支持类似的东西,如果你正在使用另一个编译器。

答案 2 :(得分:1)

你不能因为宏中的#有另一种含义(添加引号(#somevar)或连接变量(onevar ## anothervar))。 如果您有更复杂的代码,您希望包含就地而不是函数调用,请使用本地函数并添加inline关键字,使其内联,就像内联宏一样。您只需要确保将内部使用的变量作为参数传递(作为指针或引用)。作为替代方案,您可以使用#include来包含仅包含宏代码的代码文件。