c++总结

VA_ARGS

C++宏可变参数:两种核心写法速览

在封装日志、断言或工具宏时,__VA_ARGS__是必备技能。根据是否包含"固定参数",主要分为两种写法。


写法一:固定参数+可变参数(最常用)

场景 :类似printf,需要先传一个格式字符串,后面跟不定数量的参数。
定义

cpp 复制代码
// fmt是固定参数,...是可变参数
#define LOG(fmt, ...) printf(fmt, ##__VA_ARGS__)

用法

cpp 复制代码
LOG("错误码: %d", 404); 
// 展开为:printf("错误码: %d", 404);

写法二:纯可变参数(无固定参数)

场景 :不需要前缀,直接把传入的一整段代码 原样输出,常用于代码包裹或添加分号。
定义

cpp 复制代码
// 只有...,没有固定参数
#define checkKernel(...) __VA_ARGS__

用法

cpp 复制代码
// 传入复杂的函数调用
checkKernel(myFunc<<<1,1>>>(a, b));
// 展开为:myFunc<<<1,1>>>(a, b);

避坑指南:处理空参数

如果可变参数可能为空(例如LOG("纯文本")),直接写__VA_ARGS__可能会因为多出一个逗号报错。
解决方案 :使用##__VA_ARGS__。当参数为空时,##会自动把前面的逗号"吃掉",避免语法错误。

相关推荐
无足鸟ICT8 分钟前
【RHCA+】bash命令
linux·开发语言·bash
AI产品实战32 分钟前
Gradle打包生成dependencies.xml详解
xml·java·gradle
方华世界1 小时前
企业级Java AI Agent应用平台
java·开发语言·人工智能
劉宇雁1 小时前
C++ ASCII 3D无尽跑酷游戏
c++·游戏·3d
ujainu小1 小时前
原生性能优化:6变量实现高效桥接
开发语言·华为·性能优化·harmonyos
折哥的程序人生 · 物流技术专研1 小时前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
甄同学1 小时前
第十七篇:Bash Executor命令执行器,安全运行Shell命令
开发语言·安全·bash
张3231 小时前
Go语言基础 Map 函数值 闭包
开发语言·golang
杜子不疼.2 小时前
【C++ 在线五子棋对战】- 会话管理模块实现
开发语言·c++
有点。2 小时前
C++深度优先搜索(DFS)的概念(一)
开发语言·c++·深度优先