首页 > 代码库 > TCL里提到的例程

TCL里提到的例程

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里提到的例程