본문 바로가기

c,c++

printf vs puts

puts와 printf의 동작 상 차이점은 개행 여부이다.
  - printf는 개행을 해주지 않고, puts는 자동으로 개행을 해준다

puts와 printf의 사용 상 차이점은 formatting 여부이다
  - printf는 formatting을 위한 가변인자가 존재하지만, puts는 고정된 문자열만 출력 가능하다.

puts의 prototype
printf의 prototype

 

printf 는 사실 vfprintf의 wrapper 함수이다. (https://code.woboq.org/userspace/glibc/stdio-common/printf.c.html)
vfprint는 puts에 비해 많이 복잡하다.

별다른 옵션을 주지 않는다면, printf 는 fputs로 최적화 될 수 있다고 한다.

이를 막고 싶다면, compile option에 -fno-builtin 을 추가하면 된다.

참고
https://code.woboq.org/userspace/glibc/stdio-common/vfprintf-internal.c.html  < code의 1245번째 줄
https://code.woboq.org/userspace/glibc/stdio-common/printf.c.html
https://pediaa.com/what-is-the-difference-between-printf-and-puts/
https://mcuoneclipse.com/2015/11/21/gnu-gcc-printf-and-builtin-optimizations/


https://nekoplu5.tistory.com/category/?page=1 (C code 분석)

 

'c,c++' 카테고리의 다른 글

함수포인터 / 함수 객체 / 람다 간단 정리  (0) 2021.09.27
Implicit declaration of function  (0) 2021.07.11