可能的重复:
C / C ++编译指示在定义宏
有条件的“编译OMP”
我如何使用OpenMP编译宏定义里面? 例如
#define A() { \
...a lot of code... \
#pragma omp for \
for(..) \
..do_for.. \
...another a lot of code \
}
可能的重复:
C / C ++编译指示在定义宏
有条件的“编译OMP”
我如何使用OpenMP编译宏定义里面? 例如
#define A() { \
...a lot of code... \
#pragma omp for \
for(..) \
..do_for.. \
...another a lot of code \
}
由于这是回答此条件“编译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
s时,可以组合为一元运算符,例如:
_Pragma("first pragma") _Pragma("Second pragma")
在Visual Studio中您可以使用__pragma
关键字代替#pragma
。 不幸的是,这是不规范的,所以你要搞清楚你的编译器是否支持类似的东西,如果你正在使用其他的编译器。
你不能因为#
宏里面有其他含义(加引号( #somevar
)或CONCAT变量( onevar ## anothervar
))。 如果你有更复杂的代码,你想包括就地而不是函数调用,使用本地功能,并添加了inline
所以它内联只是作为一个宏将内联关键字。 你只需要确保你通过内部使用参数变量(如指针或引用)。 作为替代,你可以使用#include
只包括包含宏代码的代码文件。