728x90
4.9 printf() 함수가 인자들을 해석하는 과정
#include <stdio.h>
int main()
{
float n1 = 3.14; // 4 bytes
double n2 = 1.234; // 8 bytes
int n3 = 1024; // 4 bytes
printf("Right case :\n");
printf("%f %f %d\n\n", n1, n2, n3);
// Note the warnings in output window
printf("Wrong cases :\n");
printf("%d %d %d\n\n", n1, n2, n3); // 4, 4, 4 (N, N, N)
printf("%lld %lld %d\n\n", n1, n2, n3); // 8, 8, 8 (N, N, Y)
printf("%f %d %d\n\n", n1, n2, n3); // 8, 4, 4 (Y, N, N)
printf("%f %lld %d\n\n", n1, n2, n3); // 8, 8, 4 (Y, N, Y)
return 0;
}
Output :
Right case :
3.140000 1.234000 1024
Wrong case :
1610612736 1074339512 -927712936 -> float은 4byte지만 printf문은 그걸 double(8 byte)로 바꿔서 저장함.
뒤 변수들도 순서대로 밀려서 연쇄적으로 오류가 생겨 전부 이상한 값이 나옴
4614253070451212288 4608236261112822104 1024 -> size는 맞으나 float, 즉 부동소수점수 형태로 저장된 변수를
int형으로 해석하려 해서 오류 발생. 전체 size는 맞아서 맨 마지막 변수는 제대로 출력 가능
3.140000 -927712936 1072938614 -> 두번째의 size가 맞지 않아(type이 맞지 않아) 뒤에까지 오류 발생
3.140000 4608236261112822104 1024 -> 두번째의 size는 맞으나 type이 맞지 않아 오류 발생
강의 출처 : https://www.inflearn.com/course/following-c/dashboard
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 5.3 더하기, 빼기, 부호 연산자들 ~ 5.5 나누기 연산자 (0) | 2021.08.23 |
---|---|
[홍정모의 따라하며 배우는 C언어] 4.10 scanf() 함수의 사용법 ~ 5.2 대입 연산자와 몇 가지 용어들 (0) | 2021.08.22 |
[홍정모의 따라하며 배우는 C언어] 4.6 명백한 상수들 ~ 4.8 변환 지정자의 수식어들 (0) | 2021.08.18 |
[홍정모의 따라하며 배우는 C언어] 4.3 문자열이 메모리에 저장되는 구조 ~ 4.5 기호적 상수와 전처리기 (0) | 2021.08.16 |
[홍정모의 따라하며 배우는 C언어] 3.13 불리언형 ~ 4.2 sizeof 연산자 (0) | 2021.08.13 |