例如:
#define Y (b * 2)
#define X(b) Y
int main()
{
printf("%d", X(4)); // Want it to print 8, but doesn't work
}
C 宏可以实现类似的功能吗?
如注释中所述,宏参数名称对于特定的类似函数的宏具有本地作用域,因此您无法从宏外部访问它。
类似的事情也可以通过称为“X 宏”的设计模式实现。它基于在宏中提供数据列表(或单个项目),而不是让该列表宏采用不同的宏作为参数,以便将某些内容应用于数据列表。
示例:
#include <stdio.h>
// here X will an external function-like macro with 1 parameter:
#define LIST(X) \
X(4) \
X(8)
// some macros with 1 parameter that should print and possibly also multiplicate
#define PRINTx1(a) printf("%d ", (a)); // note the semicolon here
#define PRINTx2(a) printf("%d ", (a)*2);
int main (void)
{
LIST(PRINTx1) // note the lack of semicolon here
puts("");
LIST(PRINTx2)
}
输出:
4 8
8 16
以上所有内容都会像这样展开:
PRINTx1(4) PRINTx1(8)
puts("");
PRINTx2(4) PRINTx2(8)
->
printf("%d ", (4)); printf("%d ", (8));
puts("");
printf("%d ", (4)*2); printf("%d ", (8)*2);