提问者:小点点

如何使用C中的特定头文件打印我们程序中使用的内置函数名称?


我需要从特定的头文件中找到我们程序中使用的内置函数。

例如,我有下面的C文件:

#include<stdio.h>

int main()
{
    int a;
    scanf("%d",&a);
    printf("a = %d\n", a);
}

如果我将stdio. h头文件提供给任何命令,它需要给出如下输出:

scanf
printf

有没有内置命令来获取这个?

或者gcc或cc命令中可用的任何选项来获取此信息?


共1个答案

匿名用户

如果您使用GCC作为编译器,您可以运行以下命令:

echo "#include <stdio.h>" | gcc -E -

这将从stdio. h标头以及该标头包含的文件中打印许多行,依此类推。

有些行看起来像#line…,它们告诉你以下行来自哪里。

您可以分析这些行,但是从中提取函数(解析)相当复杂。但是如果您只是想要快速、不可靠的检查,您可以搜索这些行是否包含单词scanfprintf

编辑

正如注释中所建议的,-aux-info更有用,但它仅在编译文件时有效,而不是在预处理时有效。因此:

cat <<EOF >so.c
#include <stdio.h>

int main(int argc, char **argv) {
  for (int i = 1; i < argc; i++) {
    fprintf(stdout, "%s%c", argv[i], i < argc - 1 ? ' ' : '\n');
  }
  fflush(stdout);
  return ferror(stdout) == -1;
}
EOF

gcc -c so.c -aux-info so.aux

可以使用obobdump确定程序中的函数调用,如下所示:

objdump -t so.c

上述命令为您提供原始数据。您仍然需要解析这些数据并将其组合起来,以便仅为您提供与您的问题相关的数据。