我是 C 语言新手,正在尝试查看头文件的源代码 errno.h
.
我怎样才能:
我试过的
来自 this answer , 正在运行
gcc --print-file-name=errno.h
在我的 $HOME
目录只输出 errno.h
.来自 this answer , 正在运行
cpp -dM /usr/include/errno.h | grep 'define E' | sort -n -k 3
输出:clang: error: no such file or directory: '/usr/include/errno.h'
clang: error: no input files
来自 this answer , 正在运行 clang -E /usr/include/errno.h
输出:clang: error: no such file or directory: '/usr/include/errno.h'
clang: error: no input files
我知道有效的一种解决方案正在运行 sudo find / -name "errno*.h" -type f
.但是,这会返回 许多 结果。我想知道是否有一些编程方式可以使用 C 相关工具(例如通过调用 gcc
)来查找源代码。我的电脑
clang --version
--> Apple clang version 12.0.0 (clang-1200.0.32.27)
最佳答案
不完全清楚你在这里想做什么 - 因为 <errno.h>
是一个标准库头文件,你可以在:/usr/include/errno.h
中找到它
... 编辑 - 我现在可以看到您与 Catalina 的问题。见下文:
至少在我的(较旧的)OSX 机器上,这个标题的信息量不是很大 - 包括 <sys/errno.h>
反过来,它至少提供了符号常量:EPERM, ENOENT, ...
(参见:man intro
概览)
如 <sys/errno.h>
本身包括更多的系统头文件,尽管这些头文件很少涉及用户空间开发,但您可以大致了解编译器如何使用预处理阶段递归地找到这些头文件:clang -E /usr/include/errno.h
- 这适用于 gcc
也。
对于 卡特琳娜 , header 现在位于 SDK 下。我确信这是有原因的 - 多个 SDK(例如,iphone 开发等),以及一些防止创建 /usr/include
的安全性的事后理由。目录。无论如何,对于 Catalina,你需要 Xcode 工具:xcrun
(参见: man xcrun
)找到 SDK 路径: .../usr/include
`xcrun --show-sdk-path`/usr/include
提供路径,以便查看<errno.h>
:less `xcrun --show-sdk-path`/usr/include/errno.h
因此,您可以使用以下命令运行预处理器:clang -E `xcrun --show-sdk-path`/usr/include/errno.h
关于c - 如何在 macOS 上找到 C 头文件 errno.h 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65866733/