我有一个宏X
可以执行这样的操作。
#define X(a,b,c) \
a.foo = b; \
a.bar = c;
我想从汇编例程中调用X
,如下所示:
.data
pushl $eax;
call X(a, b, c);
有办法做到这一点吗?
答案 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);
}
但这只是首先消除了对宏的需求。所以你不妨摆脱宏并使用一个函数。