Вы можете использовать _Pragma()
из C ++ 11, чтобы получить функциональный макрос, который условно разрешает прагму:
#include <cmath>
#ifdef _MSC_VER
#define OMP_MINX()
#else
#define OMP_MINX() _Pragma("omp parallel for reduction(min:x)")
#endif
int main() {
double x = 10.0;
double array[50];
int array_size = 50;
OMP_MINX()
for (int i = 0; i < array_size; i++) {
x = std::fmin(x, array[i]);
}
}
, но я не выяснил, как сделать g cc примите в качестве аргумента что угодно, кроме литеральной строки, чтобы разрешить использование произвольной переменной - даже оператор строкового преобразования препроцессора не работает, то есть вы могли бы просто использовать
#ifndef _MSC_VER
#pragma omp parallel for reduction(min:x)
#endif
for (int i = 0; i < array_size; i++) {
x = std::fmin(x, array[i]);
}