c-有没有一种方法可以定义一个包含预处理器指令的预处理器宏



我想用下面的代码引导编译器展开几个循环。它很长,我不想复制粘贴。

#define语句可以定义预处理器宏吗?

我试过这个:

#define foo 
#ifdef __GNUC__                                             
#if __GNUC__ >= 8                                       
#pragma GCC unroll 128                              
#pragma GCC ivdep                                   
#endif                                                  
#endif                                                      
#ifdef __clang__                                            
#pragma clang loop vectorize(enable) interleave(enable) 
#endif     

但当我在代码cpp中使用foo时,它显示为:无效扩展

#ifdef 4 #if 4 >= 8 #pragma GCC unroll 128 #pragma GCC ivdep #endif #endif #ifdef __clang__ #pragma clang loop vectorize(enable) interleave(enable) #endif
#ifdef 4 #if 4 >= 8 #pragma GCC unroll 128 #pragma GCC ivdep #endif #endif #ifdef __clang__ #pragma clang loop vectorize(enable) interleave(enable) #endif

您不能以问题中显示的方式定义预处理指令。

然而,您可以将_Pragma运算符用于您的目的:

#if defined __GNUC__ && __GNUC__ >= 8
#define foo _Pragma("GCC unroll 128") _Pragma("GCC ivdep")
#elif defined __clang__
#define foo _Pragma("clang loop vectorize(enable) interleave(enable)")
#else
#define foo
#endif

最新更新