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

相关推荐
好大哥呀2 小时前
C++ 多态
java·jvm·c++
毕设源码-赖学姐2 小时前
【开题答辩全过程】以 基于Java的医院器材管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
float_com2 小时前
【java常用API】----- Arrays
java·开发语言
不会写DN3 小时前
PHP 中的文件读写与上传
android·开发语言·php
LuckyTHP3 小时前
迁移shibboleth java获取shibboleth用户信息
java·开发语言
墨韵流芳3 小时前
CCF-CSP第41次认证第三题——进程通信
c++·人工智能·算法·机器学习·csp·ccf
客卿1233 小时前
数论===质数统计(暴力法,)
java·开发语言
hz_zhangrl3 小时前
CCF-GESP 等级考试 2026年3月认证C++五级真题解析
c++·青少年编程·程序设计·gesp·c++五级·gesp2026年3月·gesp c++五级
Σίσυφος19003 小时前
C++ 多肽经典面试题
开发语言·c++·面试