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

时间:2015-12-13 01:02:28

标签: c assembly macros

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

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

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

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

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:3)

宏不是函数,这意味着它没有地址,因此您无法调用它。

宏由预处理器评估。使用它们只会导致简单的文本替换,因此它们只存在于源文件中而不存在于其他任何地方。

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

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

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

但这只是首先消除了对宏的需求。所以你不妨摆脱宏并使用一个函数。