You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++20/C++23是否支持可变参数宏?未来是否会纳入标准?

C20/C23对可变参数宏的支持情况
  • 早在C++11标准就已经引入了可变参数宏的支持,C20和C23自然完全兼容这一特性,语法和C99一致:用...声明可变参数,在宏体内通过__VA_ARGS__展开。
    示例代码:
    #define DEBUG_LOG(msg, ...) fprintf(stderr, "[DEBUG] " msg "\n", __VA_ARGS__)
    DEBUG_LOG("Value: %d, Name: %s", 100, "test");
    
  • C++20还针对可变参数宏做了优化,新增__VA_OPT__(token)特性,用来处理可变参数为空时的语法问题(比如避免多余逗号):
    #define INFO_LOG(msg, ...) fprintf(stdout, "[INFO] " msg __VA_OPT__(,) __VA_ARGS__ "\n")
    // 当无可变参数时,__VA_OPT__(,)会被忽略,不会出现语法错误
    INFO_LOG("Program started");
    
  • 目前可变参数宏的功能已经足够完善,没有主流的标准化利益方在推动将其纳入未来C++版本的新增议程——现有特性基本覆盖了所有常见使用场景。

内容的提问来源于stack exchange,提问作者rwallace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:52:38