How to prints the built in functions name used in our program using a specific header file in C?

点点圈 提交于 2020-01-17 06:01:09

问题


I need to find the built-in functions used in our program from a specific header file.

For example, I have the C file below:

#include<stdio.h>

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

If I given the stdio.h header file to any command, it needs to give the output as below:

scanf
printf

Is there any built-in command to get this?

Or any options available in the gcc or cc command to get this?


回答1:


If you are using GCC as compiler, you can run this command:

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

This will print many lines from the stdio.h header, and from the files that are included by that header, and so on.

Some lines look like #line …, they tell you where the following lines come from.

You can analyze these lines, but extracting the functions from them (parsing) is quite complicated. But if you just want a quick, unreliable check, you could search whether these lines contain the word scanf or printf.

EDIT

As suggested in a comment, the -aux-info is more useful, but it works only when compiling a file, not when preprocessing. Therefore:

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

Determining the function calls from your program can be done using objdump, as follows:

objdump -t so.c

The above commands give you the raw data. You still need to parse this data and combine it to only give you the data relevant to your question.



来源:https://stackoverflow.com/questions/37739740/how-to-prints-the-built-in-functions-name-used-in-our-program-using-a-specific-h

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!