首页 > 编程语言 > 详细

C语言开发具有可变长参数的函数的方法

时间:2019-10-17 21:55:22      阅读:64      评论:0      收藏:0      [点我收藏+]

学习交流可加

微信读者交流①群 (添加微信:coderAllen)
程序员技术QQ交流①群:736386324

---

前提:ANSI C 为了提高可移植性, 通过头文件stdarg.h提供了一组方便使用可变长参数的宏

我们考虑写一个山寨版的 printf(), 取名为 tiny_printf()
tiny_printf()的第一个参数指定后续的各参数的类型, 第二个参数开始指定需要输出的值
tiny_printf("sdd", "result..", 3, 5);

#include <stdio.h>
#include <stdarg.h>
#include <assert.h>

void tiny_printf(char *format, ...)   //原型声明的参数中出现…, 对于这部分的参数是不会做类型检查的
{
    int i;
    va_list ap;    //typedef char *  va_list;

    va_start(ap, format);    //使指针 ap 指向参数 format 的下一个位置,得到了第一个参数
    for (i = 0; format[i] != '\0'; i++) {
        switch (format[i]) {
            case 's':
            printf("%s ", va_arg(ap, char*));   
            break;
            case 'd':
            printf("%d ", va_arg(ap, int));
            break;
            default:
            assert(0);
        }
    }
    va_end(ap);  //标准里指出了对于具有 va_start()的函数需要写 va_end()
    putchar('\n');
}

int main(void)
{
    tiny_printf("sdd", "result..", 3, 5);

    return 0;
}

技术分享图片


更多精彩文章扫码关注 [ Allen有话说 ],专注于编程,职场,英语(外企)
技术分享图片

C语言开发具有可变长参数的函数的方法

原文:https://www.cnblogs.com/Allen5G/p/11695342.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!