C 언어에서 size_t 타입의 변수를 출력할 때는 서식 지정자 "%zu"를 사용하는 것이 올바른 방법입니다. 물론 "%d"를 사용해도 컴파일러에 따라 오류가 발생하지 않고 정상적으로 출력되는 것처럼 보일 수 있습니다. 하지만 이는 이식성(portability) 측면에서 위험한 방식이며, 특히 32비트와 64비트 환경 사이에서 예기치 않은 결과를 초래할 수 있습니다.
"%zu" 형식 지정자를 살펴보면 다음과 같습니다.
- z: 길이 수정자(length modifier)로,
size_t타입임을 나타냅니다. - u: 부호 없는 정수(unsigned) 타입으로 출력하겠다는 의미입니다.
size_t는 부호 없는 정수 타입이므로 %u 계열의 지정자와 함께 사용하는 것이 문법적으로 정확합니다.
예제 코드
다음은 size_t 변수를 선언하고 printf로 출력하는 간단한 예제입니다.
#include <stdio.h>
int main() {
size_t a = 20;
printf("a의 값 : %zu", a);
return 0;
}실행 결과
a의 값 : 20
코드 설명
위 프로그램에서는 먼저 size_t 타입의 변수 a를 선언하고 값 20으로 초기화했습니다.
size_t a = 20;
그다음 printf 함수와 "%zu" 형식 지정자를 사용하여 해당 변수를 출력합니다.
printf("a의 값 : %zu", a);추가 참고 사항
size_t의 실제 크기는 플랫폼에 따라 달라집니다. 32비트 시스템에서는 일반적으로 4바이트, 64비트 시스템에서는 8바이트입니다. 따라서 "%d"(int용 지정자)를 잘못 사용하면 64비트 환경에서 값이 잘리거나 잘못된 결과가 출력될 수 있습니다. 반면 "%zu"는 C99 표준부터 공식적으로 지원되므로, 표준을 준수하는 컴파일러 환경이라면 항상 안전하게 사용할 수 있습니다. 만약 C99 이전의 구형 컴파일러를 사용해야 한다면, 값을 unsigned long으로 형 변환한 뒤 "%lu"로 출력하는 방법도 대안이 될 수 있습니다.