问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言如何封装一个带有可变参数的方法?

发布网友 发布时间:2022-04-27 01:38

我来回答

3个回答

热心网友 时间:2022-04-09 18:42

需要借用C语言的VA_LIST 宏定义,及相关操作来实现可变参数。

VA_LIST 所在头文件:#include <stdarg.h>,用法如下:

(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;

(2)然后用VA_START宏初始化刚定义的VA_LIST变量;

(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);

(4)最后用VA_END宏结束可变参数的获取。

以下是一个自定义打印接口的实现:

int my_printf(const char *fmt, ...)//...表示参数可变
{
va_list args;//定义va_list
        static char gc_PrintfOutBuff[1000];
va_start(args, fmt);//初始化
vsnprintf((char *) gc_PrintfOutBuff, 1000, (char *) fmt, args);//这里没有使用VA_ARG取回单个变量,而是借用vsnprinf一次性读取。
va_end(args);//结束获取
puts("%s",(const char *)gc_PrintfOutBuff);//使用。
return 0;
}

热心网友 时间:2022-04-09 20:00

因为va_start, va_arg, va_end等定义成宏,所以它显得很愚蠢, 可变参数的类型和个数完全在该函数中由程序代码控制,它并不能智能地识别不同参数的个数和类型。
有人会问:那么printf中不是实现了智能识别参数吗?那是因为函数printf()是从固定参数format字符串来分析出参数的类型,再调用va_arg的来获取可变参数的。也就是说,你想实现智能识别可变参数的话是要通过在自己的程序里作判断来实现的。
另外有一个问题,因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利。如果simple_va_fun()改为:

热心网友 时间:2022-04-09 21:35

第一,C里没有方法,只有函数
第二,可以使用vsprintf来代替sprintf
http://ke.baidu.com/link?url=iD6CyTxyVttKGstaTFti-mRkgMvPwZFQ2zqjotAKXqlYAOashNKItRiL_OpPCvkwfBvRA73ckXhztVzENgK-l_
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
网上订酒店哪个网好 经常听了歌就使劲摇头,长期会对大脑有什么影响吗 携程有什么优点 吉娃娃幼犬多少钱一只吉娃娃犬多少钱一只黑龙江省那有卖 吉娃娃现在多少钱一只? 预防中风的小动作有哪些呢? 京巴,吉娃娃,这类小型宠物狗大概多少钱? 摇头时颈椎有响声 旅行社怎么和携程合作推广旅游线路 不是纯种的吉娃娃狗狗能卖多少钱呢 如何封装C语言的字符串相关功能 如何用C语言封装 C++的类,在 C里面使用 兵役登记站在哪里 兵役登记证要在户口所在地吗 使用C语言封装一个函数? 雪梨橙子肉炖冰糖的功效 兵役登记必须在户籍地登记吗 C语言怎么封装自己写的函数 c语言的封装 对朋友的生日祝福语有趣 给好朋友写的生日祝福语 对朋友的生日祝福 对自己最好朋友的生日祝福语 给初中好朋友的生日祝福 买了少儿超能宝能退保了,我想买别的保险会受影响吗? 太平洋少儿超能宝17-21的时候可以领钱吗 少儿超能宝是不是终身险 太平洋少儿超能宝买好以后没用过会反钱会退吗 少儿超能宝2.0保费缴纳 去年买的太平洋少儿超能宝,今年到期续费了,可以逾期吗,逾期可以多久。我要很准确的回答,谢谢 c语言中要封装一个函数( 比如什么printf之类的),肯定得用.c和.h文件... c语言中可封装指啥 C语言是怎样实现封装,继承,多态的 C语言中如何将自己常用的函数封装到编译器的库函数中具体应该怎么做呢? 关于C语言中封装函数的问题 男性公民兵役登记在哪里? c语言代码,可以像c++一样封装吗 大学新生怎么办理兵役登记证?到哪办?要带哪些东西 C语言如何封装printf函数 C语言函数封装要输出一个二维数组 怎么封装及引用 兵役登记去哪里办 C语言封装与分离是怎么的概念 尽量具体点 街道兵役登记站在哪 如何用Python封装C语言的字符串处理函数 如何封装C语言程序 上海有哪些好的大专?好的专业? 上海交大的好专业有哪些? 上海大学一共设有多少专业? 上海春考招生学校专业是什么? 鱼塘水质净化很重要,怎么打造鱼塘净化系统?