したがって、EA の提案を「回答」としてマークします。これがおそらく一般的には最良のアイデアだと思うからです。cmockの提案は、ライブラリ開発がテストの失敗によって引き起こされたtddアプローチで非常にうまく機能すると思いますが、それを試すことになるかもしれません。しかし今のところ、インタラクティブな方法で動作する、より迅速で汚れたアプローチが必要です (問題のライブラリは、別のインタラクティブなプログラム用に動的にロードされるプラグインであり、API 呼び出しのシーケンスをリバース エンジニアリングしようとしています...)
だから私がやったことは、pycparseを呼び出すpythonスクリプトを書くことでした。他の人に役立つ場合に備えてここに含めますが、一般的ではありません(たとえば、すべての関数がintを返し、typedef内のfunc定義を回避するためのハックがあると仮定します)。
from pycparser import parse_file
from pycparser.c_ast import NodeVisitor
class AncestorVisitor(NodeVisitor):
def __init__(self):
self.current = None
self.ancestors = []
def visit(self, node):
if self.current:
self.ancestors.append(self.current)
self.current = node
try:
return super(AncestorVisitor, self).visit(node)
finally:
if self.ancestors:
self.ancestors.pop(-1)
class FunctionVisitor(AncestorVisitor):
def visit_FuncDecl(self, node):
if len(self.ancestors) < 3: # avoid typedefs
print node.type.type.names[0], node.type.declname, '(',
first = True
for param in node.args.params:
if first: first = False
else: print ',',
print param.type.type.names[0], param.type.declname,
print ')'
print '{fprintf(stderr, "%s\\n"); return 0;}' % node.type.declname
print '#include "myheader.h"'
print '#include <stdio.h>'
ast = parse_file('myheader.h', use_cpp=True)
FunctionVisitor().visit(ast)