可变参数宏__VA_ARGS__和...
参数 ... __ 可变 args VA
2023-09-27 14:29:31 时间
__VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。 可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple;
__VA_ARGS__ 是一个可变参数的宏(gcc支持)。实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏_ _VA_ARGS_ _就可以被用在替换部分中,替换省略号所代表的字符串。加##用来支持0个可变参数的情况。
测试代码:
#include stdio.h
#define PRINT_DBG(debug, ...)\
{\
if(debug) {\
fprintf(stderr, "%s %s [%d]: ", __FILE__, __FUNCTION__, __LINE__);\
fprintf(stderr, __VA_ARGS__);\
}\
}
#define MACRO(s, ...) printf(s, ##__VA_ARGS__)
int main()
{
int i =100;
PRINT_DBG(1,"hello\n");
PRINT_DBG(1,"world, %d\n",i);
MACRO("hello, world\n"); //这里没有可变参数, 所以要用##__VA_ARGS__
MACRO("hello, %s\n", "fanrey");
return 0;
}
编译:gcc -o vaargs vaargs.c
运行: ./vaargs
vaargs.c main [16]: hello
vaargs.c main [17]: world, 100
hello, world
hello, fanrey
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。 可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple;
相关文章
- 生成器+列表生成式,生成器可以节省内存,随时调取函数运行,以及实现多线程运行函数,__next__()和.send(参数)的区别,a,b=b,a+b其实是元祖的用法,出现异常状态用try...except StopIteration来处理
- VS2010 如何在调试的时候输入参数
- CV-CNN-2016:ResNeXt【ResNet和Inception的结合体】【Inception中每个分支结构相同,无需人为设计】【不增加参数的前提下,提高准确率、减少超参数量】
- 用ado.net调用一个没有参数的sql server存储过程
- vue-router4 |name的作用|query传参|parmas传参|动态路由参数|命名视图|别名alias|前置路由守卫|路由过渡效果|滚动行为
- mybatis由浅入深day01_6SqlMapConfig.xml(6.2settings全局参数配置_6.3typeAliases(类型别名)_6.4typeHandlers(类型处理器)_6.5mappers(映射配置))
- OGG生成数据定义文件的参数NOEXTATTR
- top命令参数
- Physics2D.Linecast中的参数layerMask
- vue-router query和params传参(接收参数)$router $route的区别
- java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
- FastAPI 学习之路(十三)Cookie 参数,Header参数
- 知行教育项目之Hive参数优化(一)
- C++...三个点用法 实现参数个数可变的函数
- revit添加族参数
- js函数中参数的传递
- Windump教程-参数介绍
- C++默认参数与函数重载 注意事项
- HBase客户端访问超时的多个因素及参数
- nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。