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->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,);

私のマクロに何か問題がありますか、それとも単なる制限ですか?

前もって感謝します。

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 に答える