m4 不解析局部变量

发布于 2024-12-15 15:20:17 字数 699 浏览 1 评论 0原文

我的 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 code> 是全局变量,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,);

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

提前致谢。

I have a problem with an m4 macro. The macro is

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

and in my .C file i have

BARRIER(Global->start, P, MyNum) where Global->start and P are globals and MyNum a local variable.

But when I execute

m4 macrosfile.m4 sourcefile > outputfile

in the output file there is this:

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

Something wrong with my macro, or just a limitation?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱的故事 2024-12-22 15:20:17

您可以尝试将:更改

BARRIER(Global->start, P, MyNum)

为:

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

对于我来说,我会尝试使用 X-Macro< /a> 或类似的东西:

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

You could try changing:

BARRIER(Global->start, P, MyNum)

to:

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

As for me, I'd try and avoid m4 by using an X-Macro or something like it:

#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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文