2010-11-27 65 views
1

假设我调用了一个函数,该函数在源代码中使用可变数量的参数。我想对此源代码进行一些静态分析,以查找实际传递给函数的参数的类型。例如,如果我的函数调用 -获取函数参数类型

FOO(A,B,C)

我想找到一个,B和C的数据类型和存储这些信息。

+0

哪种语言? – dutt 2010-11-27 07:07:34

+0

如果你的函数是一个`printf`或`scanf`类型的变体,并且你正在使用gcc,你可以使用[`format`函数属性](http:// gcc),代码位于C – i0exception 2010-11-28 00:10:17

+0

FWIW中。 gnu.org/onlinedocs/gcc/Function-Attributes.html#index-g_t_0040code_007bformat_007d-function-attribute-2417)与你的函数,编译器会自动键入检查你的参数,该函数的所有调用。 – 2011-06-23 02:46:08

回答

1

你很好要做编译的解析及建造,一个符号表部分该程序。

这意味着运行预处理器和lexing。

这是个坏消息。

好消息是,你不要必须做很多困难的事情。无需构建AST,除了typedefs以外的代码的每一部分;结构体,联合体和枚举定义;变量或函数声明和定义;并且分析函数调用参数可能是无操作的。

关于Chris提出的进一步思考评论:您必须能够分析表达式的类型并处理va-arg促销。

与编写整个编译器相比,它仍然是一个小型项目,但应该有一些想法。