Использование прагмы openmp внутри #define
Возможные дубликаты:
C / C++ прагма в определении макроса
Условная "прагма омп"
Как я могу использовать прагмы OpenMP внутри определения макроса? Например
#define A() { \
...a lot of code... \
#pragma omp for \
for(..) \
..do_for.. \
...another a lot of code \
}
3 ответа
Как здесь ответили Условно "Pragma omp"
С99 имеет
_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
) или конкатетные переменные (onevar ## anothervar
)). Если у вас есть более сложный код, который вы хотите включить вместо вызова функции, используйте локальную функцию и добавьте inline
ключевое слово, так что оно встроено так же, как макрос будет встроен. Вам просто нужно передать переменные, используемые внутри, в качестве параметров (в виде указателей или ссылок). В качестве альтернативы вы можете использовать #include
включить файл кода, содержащий только ваш макрос код.