F.R.I.D.A.Y.

C : 왜 교수님들은 double 출력에 %f를 사용할까? 본문

DEV/Tip

C : 왜 교수님들은 double 출력에 %f를 사용할까?

F.R.I.D.A.Y. 2019. 1. 18. 15:26
반응형

 대학 교수님들이 학생들에게 C를 가르칠 때 종종 double을 출력할 때 %lf가 아니라 %f를 사용하는 교수님들이 계신다.

 대학 들어와서 교수님들이 왜 double을 계속 %f로 출력할까 생각을 해봤는데 마땅한 이유가 생각이 나지 않았다. 그래서 '표준 안지키는건 교수님들도 똑같구나'하고 있었는데 근래 들어 그 이유를 찾았다.


 이 문제는 C언어 표준과 관련이 있는데 사실, %lf는 C99에서 나온 신기술(?)이다. 기존까지는 double을 출력할 때고 %f를 사용했다고 한다.

 

 기존의 C90의 경우 scanf에 double 자료형을 사용하려면 %lf를, printf로 double 자료형을 출력할 때는 %f를 사용해왔다고 한다. 그러나 개발자들이 scanf에서는 %lf를 사용하고 printf에선 %f를 사용하다보니 혼동이 오게 되고 printf를 사용할 때 %lf로 f 전에 l을 추가로 작성하는 경우가 많았다.

 그런데 C90에서 %f의 f 전에 l은 정의되지 않은 행동[각주:1]으로 이어진다고 한다. 이러한 문제를 해결하기 위해(+ scanf와 printf에서의 대칭을 맞추기 위해) C99에서 double에 맞춘 %lf 서식 지정자가 추가된 것.


 사실, printf는 기본 인자 진급이라는 것을 통해 float가 전달되면 double로 작동한다고 한다. 즉, printf의 %lf는 아무 의미 없이 %f와 같다는 것이다.

 교수님들이 printf를 사용하실 때 %f를 작성하는 이유도 같은 의미인 듯 하다. 오히려 한 글자를 적게 작성하니 메모리가 부족하던 시대엔 필수라고할 수 있을 듯.  시대부터 배워오고 개발을 해오신 분들은 그 습관이 그대로 이어져 내려온 것[각주:2]. 교수님들이 그런 것에서 printf로 출력할 때 %f를 사용하시는 듯 하다.


참고

>> http://www.zdnet.co.kr/view/?no=00000039131011

>> https://gigglehd.com/zbxe/10649472

>> https://stackoverflow.com/questions/15614620/c90-doesnt-allow-lf-use-in-printf-why

  1. 무슨 일이 벌어질지 모른다는 의미겠지? [본문으로]
  2. 그분들에겐 그게 표준인 것. [본문으로]
728x90
반응형
Comments