假设我调用了一个函数,该函数在源代码中使用可变数量的参数。我想对此源代码进行一些静态分析,以查找实际传递给函数的参数的类型。例如,如果我的函数调用 -获取函数参数类型
FOO(A,B,C)
我想找到一个,B和C的数据类型和存储这些信息。
假设我调用了一个函数,该函数在源代码中使用可变数量的参数。我想对此源代码进行一些静态分析,以查找实际传递给函数的参数的类型。例如,如果我的函数调用 -获取函数参数类型
FOO(A,B,C)
我想找到一个,B和C的数据类型和存储这些信息。
如果这是在C++中,你可以使用黑客一起一些RTTI的typeid等
你很好要做编译的解析及建造,一个符号表部分该程序。
这意味着运行预处理器和lexing。
这是个坏消息。
好消息是,你不要必须做很多困难的事情。无需构建AST,除了typedefs以外的代码的每一部分;结构体,联合体和枚举定义;变量或函数声明和定义;并且分析函数调用参数可能是无操作的。
关于Chris提出的进一步思考评论:您必须能够分析表达式的类型并处理va-arg促销。
与编写整个编译器相比,它仍然是一个小型项目,但应该有一些想法。
哪种语言? – dutt 2010-11-27 07:07:34
如果你的函数是一个`printf`或`scanf`类型的变体,并且你正在使用gcc,你可以使用[`format`函数属性](http:// gcc),代码位于C – i0exception 2010-11-28 00:10:17
FWIW中。 gnu.org/onlinedocs/gcc/Function-Attributes.html#index-g_t_0040code_007bformat_007d-function-attribute-2417)与你的函数,编译器会自动键入检查你的参数,该函数的所有调用。 – 2011-06-23 02:46:08