如何在宏定义中使用OpenMP pragma? E.g。
#define A() { \
...a lot of code... \
#pragma omp for \
for(..) \
..do_for.. \
...another a lot of code \
}
答案 0 :(得分:3)
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
来包含仅包含宏代码的代码文件。