본문 바로가기

Study_C, C++/홍정모의 따라하며 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 4.9 printf() 함수가 인자들을 해석하는 과정

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

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com