본문 바로가기
컴퓨터/C

[C언어] Printf 의 %lf, %f와 Scanf의 %lf, %f의 차이

by Luyin 2013. 2. 16.


질문 : double형은 scanf를 할 때, 왜 %lf를 해줘야 하고 printf를 할 때는 %f 로 해주어야 하나?


답 : 

printf 는 포인터가 아닌 값을 받기 때문에 파라미터 리스트에서 각각의 데이터

크기를 알 수 있습니다.

포맷 문자가 f 이고 파라미터 크기가 4면 float로 처리하고

포맷 문자가 f 이고 파라미터 크기가 8이면 double로 처리하게 됩니다.

 

scanf는 입력을 받아야 하니까 모든 파라미터를 포인터로 받게 되죠.

하지만, 포인터는 그 주소값 4byte만 전달될 뿐

해당 포인터가 가리키는 자료형이 무엇인가는 전달되지 않습니다.

즉, scanf가 전달받는 포인터는 void타입 포인터라고 보면 됩니다.

      그렇기 때문에 float와 double을 f lf로 구분해줘야 하는 거죠.

 

물론 사용자가 만든 함수도 파라미터 전달시 타입정보는 전달되지 않습니다.

받을 수 있는 타입이 첨부터 고정되어 있을 뿐이죠. scanf처럼 타입이 가변형인

경우는 타입 정보를 명시해줄 수 있는 수단이 필요하겠죠. 그게 포맷정보입니다.