C 헤더 파일 "stdio.h"를 찾으세요.

C 헤더 파일 "stdio.h"를 찾으세요.

나는 일반적인 "hello world" 프로그램인 첫 번째 C 프로그램을 작성했습니다. stdio.h내 시스템에서 파일을 찾을 수 있는 위치를 알려줄 수 있는 사람이 있나요 ? 이것은 언어를 이해하는 데 많은 도움이 됩니다.

답변1

원래 질문에서 사용하고 있는 우분투에서는 "루트" stdio.h파일이 있습니다 /usr/include. 다른 시스템에는 다른 위치에 있을 수 있으며 모든 경우에 stdio.h다른 파일이 도입될 수 있습니다.

읽어보시면 더 도움이 될 것 같아요POSIX 사양stdio.h를 클릭한 다음 시스템이 이를 어떻게 구현하는지 확인하세요. 리눅스에서는,man 3 stdio유용한 요약도 제공됩니다. 다른 시스템에도 유사한 문서가 있습니다.

답변2

시스템에 따라 다릅니다(주의하시기 바랍니다)POSIX헤더 파일의 위치는 지정되지 않으며 C 표준도 마찬가지입니다. 관례상 에서 찾을 수 있습니다 /usr/include. 그러나 일부 시스템에서는(심지어가지다디렉토리 /usr/include)가 거기에서 발견되지 않을 수도 있습니다.

예를 들어 최근(지난 몇 년) macOS SDK는 SDK 아래 디렉터리에 이를 배치했습니다(Visual Studio와 마찬가지로...). 내 컴퓨터 중 하나에서 이를 찾으면 stdio.h다음과 같은 목록이 제공됩니다.

/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit19.0.sdk/System/DriverKit/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/sys/stdio.h
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/stdio.h
/Library/Developer/CommandLineTools/usr/include/c++/v1/stdio.h
/opt/local/include/gcc/c++/tr1/stdio.h
/opt/local/include/gcc8/c++/tr1/stdio.h
/opt/local/include/gcc9/c++/tr1/stdio.h
/opt/local/include/isc/stdio.h
/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.3.0/include/ssp/stdio.h
/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.3.0/include-fixed/stdio.h
/opt/local/lib/gcc9/gcc/x86_64-apple-darwin18/9.2.0/include/ssp/stdio.h
/opt/local/lib/gcc9/gcc/x86_64-apple-darwin18/9.2.0/include-fixed/stdio.h
/opt/local/libexec/llvm-9.0/include/c++/v1/stdio.h
/opt/local/libexec/llvm-9.0/lib/c++/v1/stdio.h

아래 파일은 /optMacPort(타사)용입니다.

파일이 있어도존재하다 /usr/include, 대부분의 콘텐츠(구현 세부정보)는 다른 파일에 있을 수 있습니다. 내부 세부 사항은 /usr/include(Solaris)의 하위 디렉토리에 있을 수도 있고 그렇지 않을 수도 있습니다(보통 그렇지 않음). 다시 말하지만 macOS가 하나의 예이지만 다른 예도 있습니다. 관련된 시스템에 대한 자세한 정보 없이는 누구도 자세한 답변을 줄 수 없습니다.

일반적으로(항상 그런 것은 아님) 컴파일러와 관련 C 전처리기가 사용된 실제 파일을 찾는 데 도움이 될 수 있습니다. 문서를 확인해야 하지만 이는 macOS의 hello-world 프로그램에서 작동합니다.

/usr/bin/clang -E hello.c >hello.log

(답변이 너무 깁니다.) 다음과 같이 시작하세요.

# 1 "안녕하세요.c"
#1""1
#1""3
366화 3
#1""1
#1""2
# 1 "Hello.c" 2
# 1 "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/stdio.h" 1 3 4
# 64 "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/stdio.h" 3 4
# 1 "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/_stdio.h" 1 3 4
# 68 "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/_stdio.h" 3 4
# 1 "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/sys/cdefs.h" 1 3 4
...

관련 정보