질문 : double형은 scanf를 할 때, 왜 %lf를 해줘야 하고 printf를 할 때는 %f 로 해주어야 하나?
답 :
printf 는 포인터가 아닌 값을 받기 때문에 파라미터 리스트에서 각각의 데이터
크기를 알 수 있습니다.
포맷 문자가 f 이고 파라미터 크기가 4면 float로 처리하고
포맷 문자가 f 이고 파라미터 크기가 8이면 double로 처리하게 됩니다.
scanf는 입력을 받아야 하니까 모든 파라미터를 포인터로 받게 되죠.
하지만, 포인터는 그 주소값 4byte만 전달될 뿐
해당 포인터가 가리키는 자료형이 무엇인가는 전달되지 않습니다.
즉, scanf가 전달받는 포인터는 void타입 포인터라고 보면 됩니다.
그렇기 때문에 float와 double을 f와 lf로 구분해줘야 하는 거죠.
물론 사용자가 만든 함수도 파라미터 전달시 타입정보는 전달되지 않습니다.
받을 수 있는 타입이 첨부터 고정되어 있을 뿐이죠. scanf처럼 타입이 가변형인
경우는 타입 정보를 명시해줄 수 있는 수단이 필요하겠죠. 그게 포맷정보입니다.
'컴퓨터 > C' 카테고리의 다른 글
[Linux] GCC 사용 예제 (0) | 2013.08.09 |
---|---|
[C언어] #if #endif 조건부 컴파일 (0) | 2013.02.20 |
[C언어] 가변인자함수 (0) | 2013.02.18 |
[C언어] scanf 기본 서식문자 조합 (0) | 2013.02.16 |
C언어에서 #include<>와 #include"" 지시어의 차이점 (0) | 2012.05.29 |