如何从汇编例程中调用 c 宏?

How do I call a c macro from an assembly routine?

我有一个宏 X 可以执行类似这样的操作。

#define X(a,b,c)   \
  a.foo = b;       \
  a.bar = c;

我想从汇编例程中调用 X,如下所示:

.data
pushl $eax;
call X(a, b, c);

有办法吗?

宏不是函数,没有地址,不能调用。

宏由预处理器求值。使用它们只会导致简单的文本替换,因此它们只存在于源文件中,无处可寻。

但是,您可以为宏设置一个包装函数并改为调用它。像这样:

#define X(a, b, c) (a).foo = (b); \
    (a).bar = (c)

void _X(struct foo *a, int b, int c)
{
    X(*a, b, c);
}

但这首先消除了对宏的需求。所以你还不如把宏去掉,用一个函数。