#include <stdio.h>
#define va_list void*
#define va_arg(arg, type) *(type*)arg; arg = (char*)arg + sizeof(type);
#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))void printNum(unsigned long num, int base)
{
/* 递归结束条件 */
if (num == 0)
{
return;
}/* 继续递归 */
printNum(num/base, base);/* 逆序打印结果 */
putchar("0123456789abcdef"[num%base]);
}
void printFloat(double f)
{
int temp;/* 先打印整数部分 */
temp = (int)f;
printNum(temp,10);/* 分隔点 */
putchar('.');/* 打印小数部分 */
f -= temp;
if (f == 0)
{
/* 浮点型数据至少六位精度 */
for (temp = 0; temp < 6; temp++)
{
putchar('0');
}
return;
}
else
{
temp = (int)(f*1000000);
printNum(temp,10);
}
}
void print( char* format,...)
{
va_list arg;
char ch;
char *str;
va_start( arg, format );
while( ( ch = *format++ ) != '\0' )
{if( ch != '%')
{
putchar( ch );
continue;
}switch( *format != '\0' ? *format++ : '\0' )
{
case 'd':
printNum( *(int*)arg, 10);
arg = (char *)arg + sizeof( format );
break;
case 'f':
printFloat( *(double*)arg );
arg = (char *)arg + sizeof( double );//为double型
break;
case 'c':
putchar( **(char**)arg );
break;
case 's':
str = va_arg( arg, char*);
while( *str != '\0' )
putchar( *str++ );
break;
}
}
}
int main()
{
print("%s\n","mcvfd");
return 0;
}
用c语言自己写一个简单的print函数
最新推荐文章于 2024-07-21 11:43:06 发布