码迷,mamicode.com
首页 > 其他好文 > 详细

TCL里提到的例程

时间:2016-09-22 23:43:57      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

1、printf / scanf

知识点:变长参数函数使用:

头文件#include<stdarg.h>

使用va_list ap; 来声明一个变长参数类型的变量ap,即argument pointer。

使用va_start(ap, fmt); fmt为最后一个有名参数(函数原型void print(char *fmt, ...)),ap将被设置为指向第一个无名参数的指针。

使用ival = va_arg(ap, int);来获得一个参数,类型由va_arg的第二个参数决定,并且ap指向下一个参数。

va_end(ap); 在函数返回前调用,完成相关清理工作。

技术分享
#include<stdio.h>
#include<stdarg.h>

int main()
{
    print("%d %d",1,2);
    return 0;
}

void print(char *fmt, ...)
{
    va_list ap;
    char *p, *sval;
    int ival;
    double dval;
    
    va_start(ap, fmt);
    for(p = fmt; *p; p++){
        if(*p != %){
            putchar(*p);
            continue;
        }
        switch (*++p) { //略过% 
            case d:
                ival = va_arg(ap, int);
                printf("%d", ival);
                break;
            case f:
                dval = va_arg(ap, double);
                printf("%f", dval);
                break;
            case s:
                for(sval = va_arg(ap, char *); *sval; sval++)
                    putchar(*sval);
                break;
            default:
                putchar(*p);
                break;
        }
    }
    va_end(ap);
}
void print(char *fmt, ...)

 

TCL里提到的例程

标签:

原文地址:http://www.cnblogs.com/autoria/p/5898261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!