728x90
int a = 10;
printf("%f", a);
이 코드의 결과는 어떨까?
아니 애초에 컴파일이 가능하긴 할까?
컴파일이 되긴 되는데 예측할 수 없다.
int 안에는 2의 보수법 형태의 이진수가 들어간다.
float 안에는 IEEE 754 표준에 따라 지수부와 가수부로 나뉜 이진수가 들어간다.
즉, 두 자료형의 데이터 저장 구조가 다르다는 것이다.
그렇다면 printf 내부적으로
float를 character로 변환시키는 코드가 있을 것이고
int를 character로 변환시키는 코드가 있을 것이다.
애초에 변환 방법 자체가 다르기 때문에 예측할 수 없는 결과가 나온다.
추가로 이렇게 타입 간의 변환을 엄격하게 걸러내지 않는 c언어는
대표적으로 타입 안정성(type safety)이 약한 언어 중 하나다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
| 가변 인자에 대하여 (0) | 2023.07.04 |
|---|---|
| 유효 숫자 (0) | 2023.06.26 |
| 알면 알수록 헷갈리는 포인터 뽀개기 (0) | 2023.06.25 |