1

我有一个 m4 宏的问题。宏是

define(BARRIER, `
#if defined USE_PTHREAD_BARRIERS
barrier_wait(&$1,$2,$3);
#elif defined (USE_CENTRALIZED_BARRIERS)
central_barrier(&$1,$2,$3);
#endif
')

在我的 .C 文件中,我有

BARRIER(Global->start, P, MyNum)其中Global->startP是全局变量,MyNum 是局部变量。

但是当我执行

m4 macrosfile.m4 sourcefile > outputfile

在输出文件中有这样的:

#if defined USE_PTHREAD_BARRIERS
barrier_wait(&Global->start,P,);
#elif defined (USE_CENTRALIZED_BARRIERS)
central_barrier(&Global->start,P,);

我的宏有问题,或者只是一个限制?

提前致谢。

4

1 回答 1

2

您可以尝试更改:

BARRIER(Global->start, P, MyNum)

到:

BARRIER(`Global->start', `P', `MyNum')

至于我,我会尝试通过使用X-Macro或类似的东西来避免 m4:

#if defined USE_PTHREAD_BARRIERS
#define BARRIER_X(x_, y_, z_) barrier_wait(&x_, y_, z_)
#elif defined (USE_CENTRALIZED_BARRIERS)
#define BARRIER_X(x_, y_, z_) central_barrier(&x_, y_, z_)
#endif

...

BARRIER_X(Global->start, P, MyNum);
于 2011-11-14T21:44:39.307 回答