printf
%
문자는 변환 사양 문자로 flags와 길이 수정자가 옵션으로 올 수 있다.diouxXaAeEfFgG%
중 하나를 사용한다. https://ehpub.co.kr/24-printf-%ED%95%A8%EC%88%98/%[플래그(flag)][폭(width)][.정밀도(precision)]서식 문자(specifier)
https://modoocode.com/35stdarg.h
stdarg.h
헤더를 사용하면 함수 선언 시 가변 인자(Variable arguments)를 가질 수 있다.stdarg.h
헤더파일은 자료형으로 va_list
를 가지며, 함수로 va_start
, va_arg
, va_end
등의 함수를 포함하고 있다.가변인자
...
은 파라미터 순서상 가장 마지막에 위치해야 한다.va_start
va_arg
va_end
mac os 환경과 wsl 환경에서 플래그 위치에 따른 차이
specifer별 정리 (mac os 기준) (gcc -Wall -Wextra -Werror 기준...😭 빼먹고 테스트 하다가 큰 일 날 뻔..)
specifier | '-' flag | '0' flag | width | precision | 비고 |
---|---|---|---|---|---|
%c | O | X | O | X | width에 맞춰 정렬한다. |
%s | O | X | O | O | precision만큼 출력하고 width에 맞춰 정렬한다. precision이 문자열보다 크더라도 문자열만큼만 출력한다. |
%d | O | O | O | O | precision이 존재하면 precision에 맞춰 남은 앞부분을 0으로 채우고 음수인 경우 그 앞에 부호를 붙인 후, width에 맞춰 공백을 채운다. ( precision이 숫자길이보다 작더라도 숫자길이만큼 출력한다.) 이 때 width는 0 flag 이더라도 공백으로 채워진다. precision이 존재하지 않는다면 width에 맞춰 앞 부분을 공백으로 채운 후 그 앞에 부호를 붙인다. 이 때 0 flag이면 '0'으로 앞 부분을 채운다. 숫자 0의 경우 .이 찍힌 상태에서 precision이 0이면 숫자 0은 출력되지 않는다. |
%i | O | O | O | O | '' |
%u | O | O | O | O | '' |
%p | O | X | O | X | 앞에 0x를 붙여서 반환한다. 왼쪽 정렬인 경우 0x를 제일 먼저 출력한다. 공백으로 padding할 때는 패딩 이후 0x를 출력한다. |
%x | O | O | O | O | precision이 존재하면 precision에 맞춰 남은 앞부분을 0으로 채우고, width에 맞춰 공백을 채운다. |
%X | O | O | O | O | '' |
%% | O | O | O | X | %c와 비슷하지만, %의 경우 0 플래그가 적용된다. 또한 -0을 동시에 쓰는 것이 유효하다. |
specifier | '#' flag | ' ' flag | '+' flag | 비고 |
---|---|---|---|---|
%c | X | X | X | |
%s | X | X | X | |
%d | X | O | O | ' ' 플래그가 있는 경우 음수가 아니면서 precision이 너비보다 클 때, 너비가 0보다 작거나 같을 때 앞을 한 칸 띄고 출력한다. |
%i | X | O | O | '' |
%u | X | X | X | |
%p | X | X | X | void* NULL 출력시 0x0을 출력한다. |
%x | O | X | X | #플래그로 0을 출력하는 경우 0x0이 아니라 0이 출력된다. #플래그의 경우 왼쪽 정렬이거나 0flag일 때 0x를 제일 먼저 출력한다. 공백으로 padding할 때는 패딩 이후 0x를 출력한다. |
%X | O | X | X | '' |
%% | X | X | X |
gcc
c파일 -L
라이브러리 경로 -l
라이브러리명gcc test.c -L ./ -l ftprintf