【发布时间】:2022-01-07 06:15:22
【问题描述】:
我需要 boo 来获取两个显式变量/常量,或者一个扩展为两个变量/常量的宏调用。目前,这不编译。 Foo,一旦扩展,似乎不会被视为 boo 的多个参数。
#include <iostream>
#include <string>
int getInt(int x, int y)
{
return x + y;
}
#define boo(x, y) getInt(x, y)
#define foo(x) x, 1
int main()
{
std::cout << boo(foo(1));
std::cout << boo(1, 2);
}
有什么想法吗?
【问题讨论】:
-
它无法编译的原因是
foo的扩展被视为单个标记,例如在评估foo(1)之后,该标记是1,1,但要将其传递给另一个宏或函数,它需要是一组标记(即1、,和1需要是一组三个令牌)。无论如何,为什么foo()和boo()根本就需要是宏?为什么不int boo(int x, int y = 1) {return getInt(x,y);}?