Hay algunos bucles que me gustaría indicarle al compilador que se desarrollen con un código como el que se muestra a continuación. Es bastante largo y prefiero no copiar y pegar.
¿Pueden las sentencias #define definir macros de preprocesador?
Intenté esto:
#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 pero cuando uso foo en el código cpp muestra que se expande de forma inválida como:
#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) #endifNo puede definir directivas de preprocesamiento de la manera que muestra en la pregunta.
Sin embargo, es posible que pueda usar el operador _Pragma para su propósito:
#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