Utiliser un pragma openmp dans #define

Doublons possibles:
Pragma C / C ++ dans la macro de définition
«Pragma omp» conditionnel

Comment utiliser un pragma OpenMP dans une définition de macro? Par exemple

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

Comme il a été répondu ici Conditionnel “pragma omp”

C99 a le mot clé _Pragma qui vous permet de placer ce qui serait autrement #pragma dans les macros. Quelque chose comme

  #define OMP_PARA_INTERNAL _Pragma("omp parallel for") 

Alors,

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

plusieurs _Pragma peuvent être combinés en tant qu’opérateur unaire, par exemple:

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

Sur Visual Studio, vous pouvez utiliser le mot clé __pragma au lieu de #pragma . Malheureusement, ceci n’est pas standard, vous devrez donc déterminer si votre compilateur supporte quelque chose de similaire si vous utilisez un autre compilateur.

Vous ne pouvez pas parce que # dans une macro a une autre signification (append des guillemets ( #somevar ) ou des variables onevar ## anothervar ( onevar ## anothervar )). Si vous avez un code plus complexe que vous souhaitez inclure sur place au lieu d’un appel de fonction, utilisez une fonction locale et ajoutez le mot clé inline afin qu’il soit en ligne de la même manière qu’une macro le serait. Vous devez simplement vous assurer de passer les variables utilisées à l’intérieur en tant que parameters (en tant que pointeurs ou références). Vous pouvez également utiliser #include pour inclure un fichier de code contenant uniquement votre code de macro.