假设我调用了一个函数,该函数在我的源代码中使用了可变数量的参数。我想对这个源代码进行某种静态分析,以找到实际传递给函数的参数类型。例如,如果我的函数调用是 -
foo(a,b,c)
我想找到a,b和c的数据类型并存储此信息。
答案 0 :(得分:1)
你必须完成编译程序的parse-and-build-a-symbol-table部分。
这意味着运行预处理器,以及lexing。
这是坏消息。
好消息是你不必须做很多艰难的事情。除了typedef之外,不需要构建AST,代码的每个部分; struct,union和enum定义;变量或函数声明和定义;并且分析函数调用参数可以是无操作。
在Chris的评论提示的进一步思考:你必须能够分析表达的类型并处理va-arg促销。
它仍然是一个比编写整个编译器更小的项目,但应该考虑一下。
答案 1 :(得分:0)
如果这是在C ++中,你可以使用typeid等来破解一些RTTI。