【问题标题】:How to find out which functions are present in which header file in C source code?如何找出 C 源代码的哪个头文件中存在哪些函数?
【发布时间】:2016-10-11 00:01:04
【问题描述】:

我有以下代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
     printf("Checking\n");
     exit(0);
}

 

在源代码之前,我有两个函数,一个是 printf(),即 存在于 stdio.h 头文件中。第二个是 exit() 函数,即 存在于 stdlib.h 头文件中。

现在我想要这个程序的输出是:

printf() 函数存在于 stdio.h 中

exit() 函数存在于 stdlib.h 中

有什么办法可以查到吗?

【问题讨论】:

  • 如果你的意思是一个神奇的功能可以完成这项工作:不,没有。
  • 您只需了解其中一些功能需要哪些头文件。如果你不能学习there's always references,作为最后的手段,你可以求助于你最喜欢的搜索引擎。
  • 您需要gcc 提供的一些信息,您可以使用-aux-info 选项打印以归档这些信息。例如。 gcc test.c -aux-info=infos.txt -o test
  • 头文件没有魔法。您可以自己制作只包含 printfexit 的原型,包括 that,然后您的程序将照常编译。
  • 同样的问题here。看起来像是一些家庭作业。

标签: c


【解决方案1】:

实际上没有可移植的方法来做到这一点,因为标题文本甚至根本不需要存在于文件中!根据#include &lt;system header file&gt; 的标准,只需修改没有参考特定实际头文件的环境,因此,在这种情况下,您无法轻松访问程序中的信息。

就确定标题文本是否可用而言,这可能是简单的文本搜索(可能有误报,因为@987654323 中可能有关于printf 的评论@ 头文件)到一个成熟的 C 感知解析器(可能很复杂)。

或者,您可以(手动)参考实际标准,因为那里提供了这些详细信息,例如:

7.21.4.1 The remove function
    Synopsis
        #include <stdio.h>
        int remove(const char *filename);

这个来自C11的小sn-p意味着remove函数可以在stdio.h中找到。

而且,如果您仍然想要在程序中执行此操作,只需将标准中的所有知识收集到文件或数据结构(如关联数组)中,然后编写代码来查看向上一个给定的标识符,大致如下:

#include <string.h>
#include <assert.h>
const char *lookFor (const char *ident) {
    // These should have ALL identifiers and their
    //   equivalent headers.

    static const char const *identifier[] = { "remove",  "strcpy",   ... };
    static const char const *header[] =     { "stdio.h", "string.h", ... };

    assert (sizeof(identifier) == sizeof(header));
    for (size_t i = 0; i < sizeof(header) / sizeof(*header); i++)
        if (strcmp (ident, identifier[i]) == 0)
            return header[i];

    return NULL;
}

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2011-08-20
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多