gpt4 book ai didi

c++ - ##__VA_ARGS__ 是什么意思?

转载 作者:行者123 更新时间:2023-12-02 09:07:28 52 4
gpt4 key购买 nike

我想知道##在这个宏定义中做了什么:

#define debug(M, ...) fprintf(stderr,M "\n",##__VA_ARGS __)

我在谷歌上搜索了答案,并得出了以下结果。

如果没有为宏提供变量参数,## 将删除逗号。所以,如果像这样调用宏

debug("message");

不加引号,它会扩展为

fprintf(stderr,"message");

不是

fprintf(stderr,"message",);

为什么去掉逗号?

最佳答案

这是 gcc 引入的一种不可移植语法,专门处理不传递任何参数的极端情况。如果没有 ##,它会提示尾随逗号是语法错误。

https://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html

C++20 为此引入了 __VA_OPT__: https://en.cppreference.com/w/cpp/preprocessor/replace

关于c++ - ##__VA_ARGS__ 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52891546/

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