변수를 출력하기 전에 '형식 지정자'에 대해서 알아보자.

전에 Hello, World! 처럼 문자열을 출력할 때는 그냥 printf( )함수의 따옴표 안에 정해진 문장을 적어주고 실행하면 되었지만, 변수는 정해진 문자가 아니라 값이 변경될 가능성이 있기 때문에 기존의 방식과는 다른 방법을 사용해야 한다.
여기서 필요한 것이 바로 '형식 지정자'이다.
형식 지정자란, 데이터의 자료형에 맞게 출력/입력 하기 위해 사용하는 기호이다. 형식 지정자는 %를 사용하며, 이 뒤에 붙는 문자에 따라 '이 데이터를 어떤 형태로 입출력 할 것인가'를 컴파일러에게 알려준다
| 형식 지정자 | %d | %i | %u | %c | %s |
| 입출력 형태 | 부호있는 10진수 정수 | 정수 | 부호 없는 정수 | 단일 문자 | 문자열 |
| 형식 지정자 | %f | %lf | %x | %X | %o |
| 입출력 형태 | 실수 | 정밀도 실수 | 16진수(소문자) | 16진수(대문자) | 8진수 |
| 형식 지정자 | %p | %e | %E | %g | %G |
| 입출력 형태 | 주소값(pointer) | 실수 지수형태 | 실수 지수형태(대문자) | 실수 형태 자동 선택 | 실수 형태 자동 선택(대문자) |
| 형식 지정자 | %% | ||||
| 입출력 형태 | % 문자 출력 |
이와 같은 형식 지정자가 있고,
[주로 사용하는 형식 지정자가 있기 때문에 지금 억지로 다 외울 필요가 없고, 프로그래밍을 하다보면 알아서 하나씩 외워진다]
| 길이 수정자 | hh | h | l | ll | L | z |
| 의미 | char 크기 | short 크기 | long 크기 | long long 크기 | long double 크기 | size_t 크기 |
이와 같은 길이 수정자가 있는데,
형식 지정자 앞에 자료형에 맞는 길이 수정자를 추가해서 표현할 수 있다.
길이 수정자를 이용한 전체 형식 지정자에 대해 정리해보면
정수형 형식지정자
- char 계열
| 자료형 | char | char[ ] | signed char | unsigned char |
| 형식 지정자 | %c | %s | %hhd | %hhu |
- short 계열
| 자료형 | short | unsigned short |
| 형식 지정자 | %hd | %hu |
- int 계열
| 자료형 | int | unsigned int |
| 형식 지정자 | %d | %u |
- long 계열
| 자료형 | long | unsigned long |
| 형식 지정자 | %ld | %lu |
- long long 계열
| 자료형 | long long | unsigned long long |
| 형식 지정자 | %lld | %llu |
여기서 정수형 자료형은 기본적으로 앞에 (signed)가 붙어 있는데 signed char의 경우 왜 형식지정자가 따로 존재하는지 궁금할 것이다.
결론부터 말하면 char는 다른 정수형 자료형보다 크기가 작아 숫자 출력 시 크기 차이를 알려주어야 하기 때문이 hh 길이 수정자를 붙여야 한다.
실수형 형식 지정자
| 자료형 | float | double | long double |
| 형식 지정자 | %f | %lf | %Lf |
size_t 형식 지정자
-> sizeof (자료형 크기 연산자)를 사용할 때는 %zu의 형식 지정자를 사용해야 한다
C언어에는 '정수 승격'이라고 하는 규칙이 존재하는데
예를 들어 char형과 short형 같은 작은 정수형에는 printf( )에 전달될 때 자동으로 int로 변환된다
그래서 char형에 길이 수정자 없이 %d를 사용해도 결과값이 출력되는 경우가 있다.
하지만 형식 지정자를 정확하게 사용하지 않으면 개발자가 의도한 결과값이 나오지 않을 가능성도 있고, 실제 자료형을 정확히 표현해주는 것이 좋기 때문에 되도록이면 형식 지정자를 확실하게 사용해주는 것이 좋다
다음 글에서는 변수를 출력하는 방법에 대해서 알아보자
VR게임 개발을 위한 언리얼엔진/C++ 공부한 내용 끄적이기...
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!