GCC 编译器如何找到某些隐式声明的函数对应的 header 文件?
How does GCC compiler find the header file corresponding to some implicitly declared functions?
对于隐式声明的函数,gcc 有时会告诉您该函数所属的 header 文件。从 this answer 开始,似乎只有一些函数是内置的——“一些编译器包含 built-in 声明,因此它们可以进行一些基本的类型检查”。
gcc 就是这样告诉你哪个 header 文件对应于一些隐式声明的函数而不是其他的吗?
例如,
隐式 printf 用法将生成附加注释:
- compilation.c:4:5:注意:包含 header
或明确提供 [=38 的声明=]
但是来自 stdlib 的 bsearch 没有:
- compilation.c:5:5: 错误:函数 'bsearch' 的隐式声明在 C99 中无效 [-Werror|,-Wimplicit-function-declaration]
how gcc is able to tell you which header file corresponds to some implicitly declared functions and not others?
Gcc 有一个符号列表和 headers。当遇到符号但未定义但在列表中时,将显示一条消息,其中包含建议的 header 名称。
请参阅 https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/gcc/c-family/known-headers.cc#L157 来自 gcc 来源的列表。
bsearch
不在列表中,所以不显示提示。我喜欢这些提示,包含 C 标准中的所有符号对我来说会很好,包括 bsearch
。如果列表被排序并使用 bsearch
,这也将是一个加速。您可以 contribute to gcc or donate to gcc 并将其写到 gcc 邮件列表。
对于隐式声明的函数,gcc 有时会告诉您该函数所属的 header 文件。从 this answer 开始,似乎只有一些函数是内置的——“一些编译器包含 built-in 声明,因此它们可以进行一些基本的类型检查”。
gcc 就是这样告诉你哪个 header 文件对应于一些隐式声明的函数而不是其他的吗?
例如,
隐式 printf 用法将生成附加注释:
- compilation.c:4:5:注意:包含 header
或明确提供 [=38 的声明=]
- compilation.c:4:5:注意:包含 header
但是来自 stdlib 的 bsearch 没有:
- compilation.c:5:5: 错误:函数 'bsearch' 的隐式声明在 C99 中无效 [-Werror|,-Wimplicit-function-declaration]
how gcc is able to tell you which header file corresponds to some implicitly declared functions and not others?
Gcc 有一个符号列表和 headers。当遇到符号但未定义但在列表中时,将显示一条消息,其中包含建议的 header 名称。
请参阅 https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/gcc/c-family/known-headers.cc#L157 来自 gcc 来源的列表。
bsearch
不在列表中,所以不显示提示。我喜欢这些提示,包含 C 标准中的所有符号对我来说会很好,包括 bsearch
。如果列表被排序并使用 bsearch
,这也将是一个加速。您可以 contribute to gcc or donate to gcc 并将其写到 gcc 邮件列表。