Sometimes you need to include directives in macros. The classic example would be putting OpenMP directives into macros. The "obvious" way of doing this is:
#define BARRIER \ #pragma omp barrier void foo() { BARRIER }
Which produces the following error:
"test.c", line 6: invalid source character: '#' "test.c", line 6: undefined symbol: pragma "test.c", line 6: syntax error before or at: omp
Fortunately C99 introduced the _Pragma mechanism to solve this problem. So the functioning code looks like:
#define BARRIER \ _Pragma("omp barrier") void foo() { BARRIER }
No comments:
Post a Comment