gpt4 book ai didi

c - 定义宏时使用逗号运算符

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:24 25 4
gpt4 key购买 nike

考虑逗号运算符适合使用 K&R 状态(第 3 章,第 63 页)的情况“...,以及在多步计算必须是单个表达式的宏中。

现在我知道 #define SYMVAR (expr1, expr2, expr3)SYMVAR 设置为 expr3 但这并不是这本书的真正用途正在暗示。我的困惑源于所提到的逗号运算符的使用缺乏适当的例子;其次,只有当每个逗号分隔的表达式实际上以任何方式对宏本身的值做出贡献时,宏中的多步计算才是有目的的,只有当我们以某种方式将一些中间值存储在一些临时变量中时才有可能任何意义,因为我们正在谈论预处理器指令。

我错过了什么吗?书中描述的逗号运算符的这种用法的适当示例是什么?

最佳答案

想象一个函数

void debug_log(const char *s);

将指定的字符串(连同时间戳)写入某种日志文件。

然后你可以定义下面的宏:

#define TWICE(X)  (debug_log("Calling TWICE(" #X ")"), (X) * 2)

TWICE(21) 然后将评估为 42,但也会写入一条消息的形式

[2019-09-03 12:34:56] Calling TWICE(21)

到日志文件。

重点是 C 中的表达式可能有副作用。它们可以修改变量,可以写入文件等,即使不使用它们的返回值也是如此。

关于c - 定义宏时使用逗号运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57777501/

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