如何在 macOS 上找到 C 头文件 errno.h 的位置?

How to find location of C header file errno.h on macOS?

我是 C 语言的新手,正在尝试查看头文件的源代码 errno.h

我怎样才能:

  1. 找出头文件在我的计算机上的存储位置?
  2. 查看头文件的来源?

我试过的

我的 $HOME 目录中的 this answer、运行 gcc --print-file-name=errno.h 只输出 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

、运行 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。然而,这个 returns many 结果。我想知道是否有一些编程方式可以使用与 C 相关的工具来查找源代码(例如,通过调用 gcc)。

我的电脑

不完全清楚你想在这里做什么 - 因为 <errno.h> 是一个标准库 header,你会在:/usr/include/errno.h 中找到它 ...编辑 - 我现在可以看到您与 Catalina 的问题。见下文:

至少在我的(较旧的)OSX 盒子上,这个 header 不是很有用 - 反过来包括 <sys/errno.h>,它至少提供了符号常量:EPERM, ENOENT, ...(请参阅:man intro 了解概述)

由于 <sys/errno.h> 本身包含更多系统 header,尽管 header 很少涉及 user-space 开发,您可以大致了解编译器如何递归查找这些 headers 使用预处理阶段:

clang -E /usr/include/errno.h - 这也适用于 gcc


对于 Catalina,header 现在位于 SDK 下。我确定这是有原因的——多个 SDK(例如 iphone 开发等),以及一些 post-hoc 安全理由阻止创建 /usr/include 目录。无论如何,对于 Catalina,您需要 Xcode 工具:xcrun(请参阅:man xcrun)以找到指向:.../usr/include

的 SDK 路径
`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