gpt4 book ai didi

宏可以执行复合赋值吗

转载 作者:行者123 更新时间:2023-11-30 15:52:26 25 4
gpt4 key购买 nike

我读的很少gnu online docs关于宏观,对这句话有点困惑:

Also multi-character operators such as += can be formed by token pasting

所以我想知道宏是否可以执行复合赋值,如何?

最佳答案

#define PASTE(a,b) a##b
int foo;
foo PASTE(+,=) 2;

我唯一一次看到它有用是在字节码解释器的内部循环中,它往往看起来像一个巨大的 case 语句,每个分支中都有非常重复的代码:

case OP_add: {
if (sp < 2) goto underflow;
double x = stack[--sp];
stack[sp-1] += x;
} break;

对每个支持的二元算术运算符重复此操作。借助标记粘贴功能,您可以从宏生成它们:

#define ARITH_BINOP(name, oper) case OP_##name: { \
if (sp < 2) goto underflow; \
double x = stack[--sp]; \
stack[sp-1] oper##= x; \
} break /* deliberate absence of semicolon */

然后,在开关中,您可以编写

ARITH_BINOP(add, +);
ARITH_BINOP(sub, -);
ARITH_BINOP(mul, *);
/* etc */

关于宏可以执行复合赋值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com