提问者:小点点

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


我有以下代码:

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

 

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

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

stdio. h中存在printf()函数

stdlib. h中存在Ex()函数

有什么办法能查出来吗?


共1个答案

匿名用户

真的没有可移植的方法来做到这一点,因为标题文本甚至根本不需要存在于文件中!在#include的标准下,这是完全可以接受的

就确定标题文本是否可用而言,这可能从简单的文本搜索(可能有误报,因为math. h头文件中可能有关于printf的注释)到完全成熟的C感知解析器(可能很复杂)。

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

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

C11中的这个小片段意味着删除函数可以在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;
}