我有一个关于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->start和P是全局变量,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,);我的宏有什么问题,还是只是一个限制?
提前谢谢。
发布于 2011-11-15 05:44:39
您可以尝试更改:
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);https://stackoverflow.com/questions/8127775
复制相似问题