Компилятор Microsoft определит макрос _OPENMP
, если установлена опция компилятора /openmp
. Для вашей цели вы можете использовать его в этой форме:
#ifdef _OPENMP
#include <omp.h> // This line won't add the library if you don't compile with -fopenmp option.
#ifdef _MSC_VER
// For Microsoft compiler
#define OMP_FOR(n) __pragma(omp parallel for if(n>10))
#else // assuming "__GNUC__" is defined
// For GCC compiler
#define OMP_FOR(n) _Pragma("omp parallel for if(n>10)")
#endif
#else
#define omp_get_thread_num() 0
#define OMP_FOR(n)
#endif
Теперь вы можете использовать OMP_FOR(n)
так:
int main() {
int n=11;
OMP_FOR(n)
for(int i=0; i<4; i++)
printf("Thread %d\n",omp_get_thread_num());
}
Вы должны скомпилировать код с помощью следующей команды:
cl /fopenmp file.c
или, если вы используете GCC,
gcc -fopenmp file.c -o exe
Выход для n>10
:
Thread 2
Thread 0
Thread 1
Thread 3
Выход для n<10
:
Thread 0
Thread 0
Thread 0
Thread 0