📄 self_printf.c
字号:
/*************************实现printf功能***************************/
#include <stdio.h>
typedef char * va_list;
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1))
//#define _INTSIZEOF(n) ((4+4-1)&~(4 - 1))
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
#define NULL 0
void self_printf(char *, ... );
int main(void)
{
int a=1;
char *b="bbb";
self_printf("This is %d,is %s!\n",a,b);
//exit(exit_SUCCESS);
return 0;
}
/* ANSI标准形式的声明方式,括号内的省略号表示可选参数 */
void self_printf( char *msg, ... )
{
va_list ap; /* 定义保存函数参数的结构 */
char *para=NULL; /* 存放取出的字符串参数 */
va_start(ap, msg); /* 栈操作 */
para=va_arg(ap, char *); /*取出当前的参数,类型为char *. */
do
{
if(*msg!='%'){/* 采用空串指示参数输入结束 */
putchar(*msg++);
}else {
switch(*++msg)
{
case 'd':
printf("%d", para);
para=va_arg(ap, char *);
msg++;
break;
case 's':
printf("%s", para);
para=va_arg(ap, char *);
msg++;
break;
default:
putchar(*msg);
break;
}
}
}while(*msg!='\0');
va_end(ap); /* 将argp置为NULL */
}
/********************************************
This is 1,is b!
********************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -