关于__VA_ARGS__的说明
__VA_ARGS__宏是C99 引入的对参数个数可变的函数式宏的正式支持
#define name(args, ...) tokens
#define name(...) tokens
"…“代表可变参数列表, 如果它不是仅有的参数, 那么它只能出现在参数列表的最后. 调用这样的函数宏时, 传递给它的参数个数要不少于参数列表中参数的个数(多余的参数被丢弃).
通过__VA_ARGS__来替换函数宏中的可变参数列表. 注意__VA_ARGS__只能用于函数宏中参数中包含有”…"的情况.
#define my_print1(...) printf(__VA_ARGS__)
int main()
{my_print1("i=%d,j=%d\n",i,j) //正确打印
}
------------------------------------------------------------------------------
#define my_print1(fmt,...) printf(fmt,__VA_ARGS__)
int main()
{my_print1("i=%d,j=%d\n",i,j); //正确打印
my_print1("iiiiiii\n") ; //编译失败打印,因为扩展出来只有一个参数,至少要两个及以上参数
}
如果是
#define my_print1(fmt,...) printf(fmt,##__VA_ARGS__)
那么my_print1里面不管是几个参数都能正确打印
##VA_ARGS 宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错
关于__VA_ARGS__的说明相关推荐
- C语言便于调试的宏定义 __FILE__、__FUNCTION__、__LINE__、__VA_ARGS__ 参数使用
__FILE__.__FUNCTION__.__LINE__ 这几个宏定义从名字就可以看出功能: __FILE__:宏在预编译时会替换成当前的源文件名,字符串类型. __FUNCTION__:宏在预编 ...
- 怎样安全的使用可变参数宏__VA_ARGS__
今天遇到一个关于可变参数的问题,下面先给出一个示例程序说明我遇到的问题. 0 #include <stdio.h> 1 2 #define print(fmt, ...) out(fmt, ...
- 可变参数__VA_ARGS__使用和va_list使用小结
1. #用来把参数转换成字符串 #define P(A) printf("%s:%d\n",#A,A); #define SQUARE(x) printf("The sq ...
- __VA_ARGS__宏
#define LOG( format, ... ) Console::WriteLine( format, __VA_ARGS__ )
- ## __VA_ARGS__ ... 宏和可变参数
在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如: 1 2 #define pr_debug(fmt,arg...) \ printk(KERN_DEBUG fmt, ##arg) 用可变 ...
- C语言 函数不定长参数 ##__VA_ARGS__经典案例 - C语言零基础入门教程
目录 一.##__VA_ARGS__简介 二.##__VA_ARGS__经典案例 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.## ...
- C语言 ##__VA_ARGS__ - C语言零基础入门教程
目录 一.##__VA_ARGS__原理 二.##__VA_ARGS__使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.##__ ...
- C语言 __VA_ARGS__ - C语言零基础入门教程
目录 一.__VA_ARGS__简介 二.__VA_ARGS__使用 1.__VA_ARGS__宏输出字符串常量 2.__VA_ARGS__宏输出可变参数 三.__VA_ARGS__缺点 1.仅仅只支 ...
- linux c程序加args,C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用
在阅读代码的时候,在一个宏定义语句中,发现了个之前未曾见过的编译器预定义宏:"__VA_ARGS__".当时,从代码语句中推测它代表宏参数:"-"(本文称之为省 ...
最新文章
- c 使用腾讯云mysql_腾讯云使用笔记一: 环境搭建
- 8 分钟了解 Kubernetes
- python 源码保护_Python代码保护
- 数据中心SDN技术发展应用之MP-BGP
- 传统ELK分布式日志收集的缺点?
- spark中dataframe解析_SparkSql 中 JOIN的实现
- 多序列比对软件Jalview的安装及使用体验
- 为什么阿里巴巴不建议MySQL使用Text类型?
- Java SE 007 循环控制语句
- php 加权计算公式,PHP计算加权平均数的方法
- Conflux的自我进化:从DAG到树图| 对话伍鸣
- (三)对图像进行Gauss高斯平滑处理
- 什么是番茄工作法?如何使用番茄工作法?
- Linux 知:文件系统
- Python004~005
- 谷歌浏览器批量下载数据,以批量下载modis数据为例
- 固定资产的主要包括哪些
- CSS餐厅练习链接及参考答案
- matlab中unidpdf,matlab poisspdf
- VMware ESXi导入苹果虚拟机