TCL里提到的例程
Posted autoria
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); }
以上是关于TCL里提到的例程的主要内容,如果未能解决你的问题,请参考以下文章