单页网站搭建,域名注册解析管理网站,.top和网站,制作 网页目录
一.##__VA_ARGS__原理二.##__VA_ARGS__使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 C 语言基础入门 一.##__VA_ARGS__原理
C 语言中 __VA_ARGS__ 是一个可变参数的宏#xff0c;是新的 C99 规范中新增的#xff0c;目前似乎只有 gcc 支持#…目录
一.##__VA_ARGS__原理二.##__VA_ARGS__使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 C 语言基础入门 一.##__VA_ARGS__原理
C 语言中 __VA_ARGS__ 是一个可变参数的宏是新的 C99 规范中新增的目前似乎只有 gcc 支持 VC 从 VC2005 开始支持。
[__VA_ARGS__](https://www.codersrc.com/archives/9450.html) 在前面的文章也介绍了有两个缺点
1.仅仅只支持字符串常量不支持可变参数
#define LOGFUNC(...) (printf(__VA_ARGS__))2.仅仅只支持可变参数不支持字符串常量
#define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)对于__VA_ARGS__ 的缺点使用 ##__VA_ARGS__ 直接完美解决##__VA_ARGS__ 使用如下
#define edebug(format, ...) fprintf (stderr, format, ##__VA_ARGS__)如果可变参数被忽略或为空## 操作将使预处理器preprocessor去除掉它前面的那个逗号.如果你在宏调用时确实提供了一些可变参数GNU CPP 也会工作正常它会把这些可变参数放到逗号的后面。
二.##__VA_ARGS__使用
/******************************************************************************************/
//Author:猿说编程
//Blog(个人博客地址): www.codersrc.com
//File:C语言教程 - C语言 ##__VA_ARGS__
//Time:2021/07/10 08:00
//Motto:不积跬步无以至千里不积小流无以成江海程序人生的精彩需要坚持不懈地积累
/******************************************************************************************/#include stdio.h#define LOGFUNC2(fmt,...) (printf(fmt line:%d - %s/%s \n,##__VA_ARGS__,__LINE__,__TIME__,__DATE__));int main()
{//可变参数LOGFUNC2(i am C :%d name:%s age:%d,112,C语言教程,18);// ok//字符串常量LOGFUNC2(i am C );// ok}
/*
输出结果
i am C :112 name:C语言教程 age:18 line:7 - 08:40:32/Jul 11 2021
i am C line:8 - 08:40:32/Jul 11 2021
*/重上面的代码可以看出使用 [##__VA_ARGS__](https://www.codersrc.com/archives/9480.html) 完美兼容可变参数和字符串常量输出
三.猜你喜欢
C 语言 数组下标越界和内存溢出区别C 语言 指针声明和定义C 语言 指针 p / p–C 语言 p/§/_(p)/_pC 语言 使用指针遍历数组C 语言 指针和数组区别C 语言 指针数组和数组指针区别C 语言 空指针 NULLC 语言 void 指针C 语言 野指针C 语言 函数值传递和址传递C 语言 函数缺省参数C 语言 函数不定长参数C 语言 函数指针C 语言 指针函数C 语言 回调函数 callbackC 语言 typedefC 语言 define 定义常量C 语言 define 防止头文件重复包含C 语言 #pragma onceC 语言 #include 与 #include “” 区别C 语言 const 修饰变量C 语言 const 修饰指针C语言 const 修饰函数C 语言 const 修饰函数参数C 语言 const 和 define 区别C 语言 #运算符C 语言 ##运算符C 语言 __VA_ARGS__C 语言 ##__VA_ARGS__
未经允许不得转载猿说编程 » C 语言 ##__VA_ARGS__