Поиск заголовка C "stdio.h"

Вероятно, сработает не у всех, но я решил проблему, просто перезагрузив компьютер. Вероятно, нужно было сделать это первым, но прошло некоторое время с тех пор, как мне нужно было перезапустить его, чтобы что-то исправить.

0
04.02.2021, 10:16
2 ответа

В Ubuntu, которую вы используете в исходном вопросе, «корневой» файл stdio.hнаходится в /usr/include. Другие системы могут поместить его в другое место, и во всех случаях вполне вероятно, что stdio.hизвлечет другие файлы.

Вероятно, вам будет полезнее прочитать спецификацию POSIX для stdio.h, а затем посмотреть, как это реализовано в вашей системе. В Linuxman 3 stdioтакже содержит полезное резюме; другие системы имеют аналогичную документацию.

3
18.03.2021, 22:32

Это зависит от системы -(обратите внимание, что POSIX не указывает расположение файлов заголовков -и стандарт C ). Обычно его можно найти в /usr/include. Однако в некоторых системах (, даже тех , в которыхесть каталог /usr/include), его там может не быть.

Например, недавние (последние несколько лет )SDK для macOS поместили это в каталог в 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

Файлы в разделе /optпредназначены для MacPorts (третьей -стороны ).

Даже если файл находитсяв /usr/include, большая часть его содержимого (деталей реализации )может находиться в другом файле. Внутренние -сведения могут находиться в подкаталоге/usr/include(Solaris ), а могут и не быть (обычно не ). Опять же, macOS является примером, но есть и другие. Без подробностей о задействованной системе никто не может дать подробный ответ.

Обычно (опять же, не всегда ), ваш компилятор и связанный с ним препроцессор C могут помочь найти фактический используемый файл. Вам придется обратиться к соответствующей документации, но у меня это сработало с macOS для программы hello -world:

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

что (слишком длинно для ответа )начинается так:

# 1 "hello.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
...
2
18.03.2021, 22:32

Теги

Похожие вопросы