网站建设 工商注册,凡科互动app下载,郑州网站建设技术方案,易语言怎么做网站目录
一.__VA_ARGS__简介二.__VA_ARGS__使用 1.__VA_ARGS__宏输出字符串常量2.__VA_ARGS__宏输出可变参数 三.__VA_ARGS__缺点 1.仅仅只支持字符串常量#xff0c;不支持可变参数2.仅仅只支持可变参数#xff0c;不支持字符串常量 四.猜你喜欢 零基础 C/C 学习路线推荐 : C/…目录
一.__VA_ARGS__简介二.__VA_ARGS__使用 1.__VA_ARGS__宏输出字符串常量2.__VA_ARGS__宏输出可变参数 三.__VA_ARGS__缺点 1.仅仅只支持字符串常量不支持可变参数2.仅仅只支持可变参数不支持字符串常量 四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 C 语言基础入门 一.__VA_ARGS__简介
__VA_ARGS__ 是一个可变参数的宏是新的 C99 规范中新增的目前似乎只有 gcc 支持 VC 从 VC2005 开始支持。
[__VA_ARGS__](https://www.codersrc.com/archives/9450.html)需要配合 define 使用总体来说就是将左边宏中 .. 的内容原样抄写在右边 __VA_ARGS__ 所在的位置; 举个例子
#define myprintf(...) printf( __VA_ARGS__)示例代码如下
/******************************************************************************************/
//Author:猿说编程
//Blog(个人博客地址): www.codersrc.com
//File:C语言教程 - C语言 __VA_ARGS__
//Time:2021/07/10 08:00
//Motto:不积跬步无以至千里不积小流无以成江海程序人生的精彩需要坚持不懈地积累
/******************************************************************************************/#include stdio.h#define myprintf(...) printf( __VA_ARGS__)int main()
{myprintf(0123456789\n);myprintf(www.codersrc.com\n);myprintf(C语言/C教程-猿说编程\n);return 0;
}/*
0123456789
www.codersrc.com
C语言/C教程-猿说编程
*/注意[__VA_ARGS__](https://www.codersrc.com/archives/9450.html) 只能是一些不含任何变量的字符串常量。如果 __VA_ARGS__ 含有变量整个 printf 的输出与变量便不能一一对应输出会出错。
二.__VA_ARGS__使用 __DATE__ 当前日期一个以 “MMM DD YYYY” 格式表示的字符串常量。 __TIME__ 当前时间一个以 “HH:MM:SS” 格式表示的字符串常量。 __FILE__ 这会包含当前文件名一个字符串常量。 __LINE__ 这会包含当前行号一个十进制常量。 __STDC__ 当编译器以 ANSI 标准编译时则定义为 1判断该文件是不是标准 C 程序。 __FUNCTION__ 程序预编译时预编译器将用所在的函数名返回值是字符串; 1.__VA_ARGS__宏输出字符串常量
/******************************************************************************************/
//Author:猿说编程
//Blog(个人博客地址): www.codersrc.com
//File:C语言教程 - C语言 __VA_ARGS__
//Time:2021/07/10 08:00
//Motto:不积跬步无以至千里不积小流无以成江海程序人生的精彩需要坚持不懈地积累
/******************************************************************************************/#include stdio.h#define LOGFUNC(...) (printf(__VA_ARGS__ - %d - %s/%s\n,__LINE__,__TIME__,__DATE__))int main()
{LOGFUNC(0123456789);LOGFUNC(www.codersrc.com);LOGFUNC(C语言/C教程-猿说编程);return 0;
}/*
0123456789 - 9 - 07:52:40/Jul 11 2021
www.codersrc.com - 10 - 07:52:40/Jul 11 2021
C语言/C教程-猿说编程 - 11 - 07:52:40/Jul 11 2021
*/缺点
只支持字符串不支持可变参数或者多个参数[__VA_ARGS__](https://www.codersrc.com/archives/9450.html) 只能是一些不含任何变量的字符串常量。如果 __VA_ARGS__ 含有变量整个 printf 输出与变量便不能一一对应输出会出错
/********************************************\*\*********************************************///Author:猿说编程//Blog(个人博客地址): www.codersrc.com//File:C 语言教程 - C 语言 **VA_ARGS**//Time:2021/07/10 08:00//Motto:不积跬步无以至千里不积小流无以成江海程序人生的精彩需要坚持不懈地积累/********************************************\*\*********************************************/#include stdio.h#define LOGFUNC(...) (printf(**VA_ARGS** - %d - %s/%s\n,**LINE**,**TIME**,**DATE**))int main(){LOGFUNC(0123456789);//OK//错误写法只支持字符串不支持可变参数或者多个参数LOGFUNC(%d,%d,1,2); //编译报错return 0;}/\*main.cpp: In function ‘int main()’:main.cpp: error: expected ‘)’ before string constant4 | #define LOGFUNC(...) (printf(**VA_ARGS** - %d - %s/%s\n,**LINE**,**TIME**,**DATE**))\*/2.__VA_ARGS__宏输出可变参数
/******************************************************************************************/
//Author:猿说编程
//Blog(个人博客地址): www.codersrc.com
//File:C语言教程 - C语言 __VA_ARGS__
//Time:2021/07/10 08:00
//Motto:不积跬步无以至千里不积小流无以成江海程序人生的精彩需要坚持不懈地积累
/******************************************************************************************/#include stdio.h#define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)int main()
{//输出可变参数LOGSTRINGS(0123456789,%d%s,1,sd); //OK//输出字符串常量报错//LOGSTRINGS(C语言/C教程-猿说编程);/*LOGSTRINGS(C语言/C教程-猿说编程);报错如下main.cpp: In function ‘int main()’:
main.cpp: error: expected primary-expression before ‘)’ token3 | #define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)*/return 0;
}/*
0123456789,1sd
*/三.__VA_ARGS__缺点
1.仅仅只支持字符串常量不支持可变参数
#define LOGFUNC(...) (printf(__VA_ARGS__))2.仅仅只支持可变参数不支持字符串常量
#define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)那么如何才能解决 __VA_ARGS__ 既能支持常规字符串也能支持可变参数问题我们可以留到下一篇文章通过 [##__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__