blog
January 28, 2021
gcc 명령어를 사용할 때 -H 옵션을 주게 되면 컴파일 대상이 되는 파일에 include 되는 파일들의 목록을 출력할 수 있다. 이 때 출력되는 목록은 stdout 이 아닌 stderr 로 출력되기 때문에 2>
를 사용하여 파일에 담아 원하는 파일을 쉽게 검색해볼 수 있다
% gcc -H main.c
. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/errno.h
.. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/errno.h
... /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/cdefs.h
.... /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_symbol_aliasing.h
.... /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_posix_availability.h
... /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_errno_t.h
% gcc -H main.c 2> result.txt
%
stdlib.h
나 stddef.h
에 정의되어 있지 않다. read()
함수의 반환타입인데 자주 사용되는 것은 아니라 size_t 에 비해 꽁꽁 숨겨져 있는 듯한 모습이다.// include/sys/_types/_ssize_t.h
typedef __darwin_ssize_t ssize_t;
__darwin_ssize_t
처럼 앞에 __darwin_
이라는 접두사가 붙은 경우는 아마 machine 에 따라 구분하여 정의를 해놓은 type 인 듯 하다// include/arm/_types.h
typedef long __darwin_ssize_t; /* byte count or error */
// include/i386/_types.h
typedef long __darwin_ssize_t; /* byte count or error */