如何找出C源代码中哪个头文件存在哪些函数?

时间:2016-06-10 06:15:04

标签: c

我有以下代码:

#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中

有什么办法可以找到这个吗?

1 个答案:

答案 0 :(得分:0)

实际上没有可移植的方法,因为标题文本根本不需要存在于文件中!#include <system header file>标准下完全可以接受修改环境而不参考特定的实际头文件,因此,在这种情况下,您无法轻松访问程序中的信息。

在查明标题文本 是否可用方面,这可能包括简单的文本搜索(可能有误报,因为可能有关于printf的评论math.h头文件)到一个完整的C-aware解析器(可能很复杂)。

或者,您可以(手动)引用实际标准,因为那些细节可用,la:

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

来自C11的这个小片段意味着可以在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;
}
相关问题