是否有任何工具可以解析ac头文件并从ac头文件中提取函数原型

Rom*_*her 6 c parsing code-generation

特别是获取函数返回类型(如果可能的话,它是否为指针类型).

(我正在尝试编写ioctl/dlsym包装器库的自动生成(为LD_PRELOAD编辑)).python或ruby库是首选,但欢迎使用任何可行的解决方案.

use*_*653 5

我已经成功地使用了来自hackage的Haskells Language.C包(Haskells回答CPAN)来做类似的事情.它将为您提供C(或头文件)文件的完整解析树,然后可以遍历该文件以提取所需信息.应该AFAIK也可以使用#includes #defines等.

我担心我没有安装相关软件来测试它,但它会是这样的:

handler (DeclEvent (Declaration d)) =
do
let (VarDecl varName declAttr t) = getVarDecl d
case t of 
     (FunctionType (FunType returnType params isVaradic attrs)) -> 
        do {- varName RETURNS returnType .... -}
         _ -> do return ()
    return ()
handler _ = 
    do return ()

main = do    
    let compiler = newGCC "gcc"
    ast <- parseCFile compiler Nothing opts cFileName
    case (runTrav newState (withExtDeclHandler (analyseAST ast) handler)) of
        ...
Run Code Online (Sandbox Code Playgroud)

上面的内容可能看起来很可怕,但你可能不需要更多的Haskell来做你想做的事!我很乐意分享我使用过的完整源代码(约200行),如果有任何帮助的话.