C可变参数用法以及自己的Message()函数
来源:互联网 发布:三权分立 知乎 编辑:程序博客网 时间:2024/06/06 12:58
首先,关于可变参数,实际上,也就是未知参数个数,在调用的时候再解析。我的理解是C总会把参数放到函数堆栈,那么,虽然声明函数 的时候不知道参数个数,但可以在使用时指明,并根据指出的参数进行解析,操作。
解析这种参数使用va_list宏,用法如下:
1. 声明va_list,
2. 使用va_start()取得参数"..."地址
3. 使用va_arg()取得下一参数地址 4. 使用va_end()结束解析
如
va_list args; //声明变量
va_start(args, before); //开始解析。args指向before后面的参数
参数类型 var=va_arg(args, 参数类型);//取下一个参数并返回。args指向下一个参数
va_end(args);
完全可以自己写format,并且解析"...",自己写出类似printf的函数,不过目前我不需要如此高端,下面是利用可变参数的一个简单例子,仅仅对需要打印的message做一下标记,并且可以留作以后修改(而不需要对所有代码修改)(比如,想改变格式,想改变打印方式,不在屏幕打印,而是用callback或者log到文件,等等)
int Error( const char *format, ... ){va_list ap;int retval;va_start(ap,format);printf("[ERROR] ");retval = vprintf(format,ap);printf("\n");va_end(ap);return retval;}
我经常用到的例子:
void TRACE(LPCSTR szFormat, ...){CHAR szBuffer[1024];va_list pArgs; va_start(pArgs, szFormat);vsprintf(szBuffer, szFormat, pArgs);va_end(pArgs);OutputDebugString(szBuffer); }
用法:
TRACE(" CKM_DES_ECB mech->ulParameterLen %d",mech->ulParameterLen);
TRACE("enter encr_mgr_encrypt_update\n");
- C可变参数用法以及自己的Message()函数
- 可变参数的C函数
- C函数的可变参数
- C可变参数的函数
- c 可变参数 定义可变参数的函数
- c 可变参数 定义可变参数的函数
- 可变参数模板函数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- C语言中可变参数的用法
- Hadoop-1.0.3和hbase-0.92.1整合安装
- java HttpURLConnection 返回码> 400解决方案
- java读写xml文件
- mochiweb小结(基本流程)
- MySQL优化之filesort
- C可变参数用法以及自己的Message()函数
- TOUCHXML解析xml
- Ext JS 4:动态加载和新的类机制(Dynamic Loading and New Class System)
- js控制限制输入数字,限制输入中文
- C语言清空输入缓冲区的N种方法对比
- csv文件下载出现乱码
- WebGL自学课程(7):WebGL加载跨域纹理出错Cross-origin image load denied by Cross-Origin Resource Sharing policy.
- 建造者模式
- linux zip压缩命令解压命令