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__。当参数为空时,##会自动把前面的逗号"吃掉",避免语法错误。

相关推荐
ictI CABL6 分钟前
Tomcat 乱码问题彻底解决
java·tomcat
敖正炀8 分钟前
DelayQueue 详解
java
敖正炀34 分钟前
PriorityBlockingQueue 详解
java
shark222222240 分钟前
Spring 的三种注入方式?
java·数据库·spring
陈煜的博客1 小时前
idea 项目只编译不打包,跳过测试,快速开发
java·ide·intellij-idea
JAVA学习通1 小时前
LangChain4j 与 Spring AI 的技术选型深度对比:2026 年 Java AI 工程化实践指南
java·人工智能·spring
2501_933329551 小时前
企业级舆情监测系统技术解析:Infoseek数字公关AI中台架构与实践
开发语言·人工智能·自然语言处理·架构
Wave8451 小时前
C++继承详解
开发语言·c++·算法
Tairitsu_H1 小时前
C++类基础概念:定义、实例化和this指针
开发语言·c++
.柒宇.1 小时前
Java八股之反射
java·开发语言