PRINTF(1)

명칭
printf - 포맷이 끝난 출력

서식
printf format [arguments ...]

해설
printf 유틸리티는 제일 인수보다 후의 인수를 포맷에 맞추어 출력합니다. format (은)는 3 종류의 오브젝트를 포함한 캐릭터 라인입니다. 하나는 통상의 캐릭터 라인으로, 단순하게 표준 출력에 카피됩니다. 하나는 escape sequence로, 변환되고 나서 표준 출력에 카피됩니다. 하나 더는 포맷 기술로, 이것들은 각각, 후에 계속된다 arguments (을)를 표시합니다.

제일 인수보다 후의 arguments (은)는 대응하는 포맷이 c 인가 s 의 경우는 캐릭터 라인으로서 다루어져 그 이외는 이하와 같은 확장 부분과 맞추어 C 의 정수로서 평가됩니다.

•   선두에 ``+''나 ``-''의 부호를 적을 수가 있습니다.
•   만약 선두가 싱글 쿼트나 더블 쿼트로 시작되어 있는 경우, 그 값은 다음의 캐릭터의 ASCII 코드가 됩니다.

포맷 캐릭터 라인은 arguments (을)를 변환하기 위해서 몇번이나 재이용됩니다. 여분의 포맷 기술은 0 이나 눌 캐릭터 라인에 평가됩니다.

캐릭터 escape sequence는 ansiC 의 정의를 확장한, backslash에 의한 표기입니다. 캐릭터 캐릭터와 그 의미는 이하와 같이 됩니다.

\a  <벨> 캐릭터를 씁니다.
\b  <백 스페이스> 캐릭터를 씁니다.
\c  이 캐릭터 라인중의 나머지의 캐릭터를 무시합니다.
\f  <form feed> 캐릭터를 씁니다.
\n  <개행> 캐릭터를 씁니다.
\r  <복귀> 캐릭터를 씁니다.
\t  <탭> 캐릭터를 씁니다.
\v  <수직 탭> 캐릭터를 씁니다.
\'  <싱글 쿼트> 캐릭터를 씁니다.
\\  <backslash>캐릭터를 씁니다.
\num
\0num
    1 에서 3 자리수의 8 진수 num 그리고 나타내진다 ASCII 코드의 8 비트 문자를 씁니다.

각 포맷의 지정은 퍼센트 캐릭터 (``%'')로부터 시작됩니다. 포맷의 다른 부분은, 이하의 차례로 계속됩니다:

이하의 플래그가 0 개 이상 다합니다:

    #   `#'캐릭터는 수치를 ``별형식''로 표시시킨다고 하는 지정입니다. c, d, s 포맷에서는 이 옵션은 무효입니다. o 포맷에서는 출력 캐릭터 라인의 선두에 0 을 붙이기 (위해)때문에, 그 값의 정밀도가 오릅니다. x (X) 포맷에서는, 0 이외의 값이라면 출력되는 캐릭터 라인의 선두에 0x (0X) 하지만 다합니다. e, E, f, g, G 의 포맷에서는, 비록 소수점 이하의 값이 없어도 항상 소수점이 다합니다 (통상의 포맷에서는, 소수점 이하의 값이 있을 때 마셔 결과에 소수점이 포함됩니다). g (와)과 G 의 포맷에서는, 결과의 마지막을 뒤따르는 0 은 통상의 포맷과 달리 생략 되지 않습니다.

    -   지정한 필드폭으로 왼쪽 막혀라 그리고 출력합니다.

    +   부호포함의 포맷때에, 숫자의 전에 항상 부호가 도착하게 됩니다.

    ‘ ’ 부호포함의 포맷으로 정의 값을 표시할 때에 선두에 공백이 하나 삽입됩니다. `+'와 공백의 양쪽 모두가 지정되었을 경우,`+'가 공백에 우선됩니다.

    0   `0'는 공백에서 패딩 하는 대신에 `0'로 패딩을 행합니다. `-'와 `0'의 양쪽 모두가 지정되었을 경우,`-'가 우선됩니다.

필드폭:
    field width; 필드폭 (을)를 지정하기 위해서 옵션으로서 붙이는 수치입니다. 출력하는 캐릭터 라인이 이 필드폭보다 짧은 경우, 필드폭을 묻어 게좌측이 (왼쪽 막바지 지시가 있으면, 우측이) 공백에서 패딩 됩니다. (선두에 도착하는 0 은 플래그입니다만, 파묻힌 0 은 필드폭의 일부에서 아 일로 주의)

정밀도:
    옵션으로 붙이는 피리어드 ‘.’, 에는, 정밀도 (을)를 나타내는 수의 옵션이 계속됩니다. 이 수는 e (와)과 f 포맷의 경우에 소수점 이하의 값을 표시하는 자리수를 지정합니다. e, f 이외에서는, 캐릭터 라인으로부터 표시되는 캐릭터의 최대수가 됩니다. 만약 정밀도를 나타내는 수 하지만 없으면, 정밀도는 0 으로 여겨집니다.

Format:
    포맷의 형태를 나타내는 캐릭터입니다 ( diouxXfwEgGcsb 중 언젠가).

필드폭이나 정밀도는 숫자대신에 ‘*’ 도 사용할 수 있습니다. 이 경우, 필드폭이나 정밀도는 argument 그리고 줍니다.

포맷 캐릭터와 그 의미는 이하와 같이 됩니다:

diouXx
    argument (은)는 각각 부호 붙어 있는 10 진수 (d 또는 i), 부호 없음 8 진수 (o), 부호 없음 10 진수 (u), 부호 없음 16 진수 (X 또는 x)로 표시됩니다.

f   argument 하지만 `[-]ddd.ddd'의 스타일로 표시되어 인수의 정밀도로 지정한 수만큼 소수 점이하의 d 가 계속됩니다. 정밀도의 지정이 없으면 6 캐릭터가 됩니다. 만약 정밀도 하지만 명시적으로 0 으로 지정되었을 경우는 소수점과 그것 이하의 값은 표시되지 않습니다.

eE  argument 하지만 ‘[-d.ddd±dd]’ (와)과 같이, 소수점의 전에 숫자가 하나로, 후에는 인수의 정밀도로 지정한 수만큼 숫자가 계속됩니다. 정밀도의 지정이 없으면 6 캐릭터가 됩니다. ‘E’ 포맷이 사용됩니다.

gG  argument 하지만, 최소의 길이로 최대의 정밀도를 얻을 수 있도록(듯이), f 또는, e (E) 그리고 표시됩니다.

c   argument 의 최초의 캐릭터가 표시됩니다.

s   argument 하지만 마지막까지인가, 또는 정밀도로 지정된 캐릭터수만큼 표시됩니다. 정밀도가 0 카모시구는 지정되어 있지 않은 경우는 캐릭터 라인 모두가 표시됩니다.

b   s (와)과 같습니다만, 캐릭터 라인 argument 안의 backslash 표현의 캐릭터 이스케이프를 해석합니다.

%   `%'를 표시합니다. 인수는 다하지 않습니다.

소수점 캐릭터는, 프로그램의 로케일 (카테고리 LC_NUMERIC) 그리고 정의됩니다.

존재하지 않는 필드, 혹은 작은 필드폭지정으로 필드가 잘라 채울 수 있을 것은 없습니다. 지정된 필드가 실제의 폭을 넘었을 때는, 패딩이 일어납니다.

진단

호환성
전통적인 BSD 의 동작인, 숫자로 개시하지 않는 수치 서식 인수가, ASCII 코드의 최초의 캐릭터에 변환된다고 하는 동작은, 서포트되지 않습니다.

관련 항목
echo(1), printf(3)

표준
printf 명령은, p1003.2 사양 호환이라고 기대됩니다.

역사
printf (은)는, 4.3BSD Reno 그리고 추가되어 표준 프로그램 라이브러리 함수 printf(3) 에 따르고 있습니다.

버그
부동 소수점수(실수)는 ASCII (으)로부터 부동 소수에 변환되어 또 돌아오므로, 부동 소수의 정밀도가 없어집니다.

ANSI 16 진캐릭터 정수는 일부러 준비되어 있지 않습니다.

escape sequence \000 가 캐릭터 라인 종단자입니다. format 안에 존재하면(자), format (은)는 \000 캐릭터의 곳에서 잘라 버릴 수 있습니다.