#include <stdio.h>
#include <string.h>
void myprint(const char* str, ...)
{
int i;
int* idx = (int*)&str; //스택에 매개변수가 쌓일때 4byte크기로 쌓이기 때문에 int형 포인트를 설정해주었다. long으로 해도 상관 없다.4byte이기만 하면 된다.
idx++; //현재 포인터는 str문자열의 포인터를 가리키고 있으므로 다음 매개변수를 가리키기 위해 4byte 다음 방을 가리키게 한다.
while(*str != NULL)
{
if(*str == '%')
{
switch(*(str+1))
{
case 'd': // int 형 매개변수 출력
printf("%d",*(int*)idx);
idx++;
str+=2;
break;
case 'c': // char 형 매개변수 출력
printf("%c",*(char*)idx);
idx++;
str+=2;
break;
case 'f': // double 형 매개변수 출력
printf("%f",*(double*)idx);
idx++; // double 형은 8byte를 차지하기 때문에 4byte씩 2번 뛰어 넘는다.
idx++;
str+=2;
break;
case 's': // 문자열 매개변수 출력
printf("%s",(char*)*idx);
idx++;
str+=2;
break;
default:
break;
}
}
else
{
printf("%c",*str);
str++;
}
}
}
int main ()
{
myprint("%d %c %f %s helloworld \n\n",10,'a',10.1,"abc");
}
[typedef] About typedef in Function Pointer (0) | 2023.07.25 |
---|---|
[함수 호출 규약] __cdecl, __clrcall, __stdcall, __fastcall, __thiscall ,__vectorcall (0) | 2023.07.25 |
[Macro함수] 라이브러리 개발시 do while(0) 를 사용하는 이유 (0) | 2023.07.25 |