提问者:小点点

编译器GCC如何找到一些隐式声明的函数对应的头文件?


在隐式声明函数的情况下,gcc有时会告诉你函数所属的头文件。从这个答案来看,似乎只有一些函数是内置的——“一些编译器包含它们的内置声明,因此它们可以进行一些基本的类型检查”。

这就是gcc能够告诉您哪个头文件对应于一些隐式声明的函数而不是其他函数的方式吗?

例如,

>

  • 隐式printf用法将生成一个额外的注释:

    • compilation. c:4:5:注意:包括标题

    但是来自stdlib的bsearch不会:

    • compilation. c:5:5:错误:函数'bsearch'的隐式声明在C99中无效[-Werror|,-Wimplact-Function-声明]

  • 共1个答案

    匿名用户

    gcc如何告诉您哪个头文件对应于一些隐式声明的函数而不是其他函数?

    Gcc有一个符号和标头列表。当遇到符号且未定义且在列表中时,会显示一条消息,其中包含建议的标头名称。

    参见gcc源代码中https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/gcc/c-family/known-headers.cc#L157的列表。

    bsearch不在列表中,所以提示不显示。我喜欢这些提示,如果包含C标准中的所有符号,包括bsearch,那就太好了。如果列表被排序并使用bsearch,这也将是一个加速。您可以向gcc捐款或捐赠给gcc并将其写入gcc邮件列表。