我正在寻找一种从某些 C/C++ 源代码中打印出特定函数的简单方法。例如,假设 test.c 在其中定义了几个函数。我希望能够打印出仅与其中一个函数关联的源代码。
编辑:对不起,我应该更清楚我的最终目标。我希望将功能打印到屏幕上,以便我可以wc
用来获取此特定功能的字数。此外,我希望这成为命令行工具链的一部分,因此手动输入文件和选择文本不是一个选项。
我正在寻找一种从某些 C/C++ 源代码中打印出特定函数的简单方法。例如,假设 test.c 在其中定义了几个函数。我希望能够打印出仅与其中一个函数关联的源代码。
编辑:对不起,我应该更清楚我的最终目标。我希望将功能打印到屏幕上,以便我可以wc
用来获取此特定功能的字数。此外,我希望这成为命令行工具链的一部分,因此手动输入文件和选择文本不是一个选项。
我通常从内部使用print-region
(或最好print-region-with-faces
)emacs
。但是,它不是自动的,我必须手动选择区域。
也适用于其他语言。
以下由于评论中的汤姆史密斯:
(defun print-fn (interactive)
(save-excursion (mark-defun)
(print-region)))
如果您喜欢这个,请点击 Tom 用户页面的链接,看看他是否值得您投票...
制作这个 CW,所以我不会从人们投票支持汤姆的好想法中受益。干杯。
澄清后编辑:这似乎没有指向 OP 的实际问题。唉。
打印出函数的最终目标是什么?
你想这样使用它吗:
if (error == Foo())
{
PrintFunction(foo);
exit(1);
}
有更简单的方法可以输出错误所在的位置。如果我对您尝试解决的问题有更好的了解,我可能会提供更多帮助。
关于如何实现这样的 PrintFunction() 的想法:
- 有一个包装函数的数据结构,包含:函数行开始、函数行结束,可能还有指向函数的指针。
- 编写一个函数,根据源文件的编号打印出一行。
__FILE__
给你源文件名。- 知道函数在代码中的开始和结束位置后,打印函数将是微不足道的。
这有一个烦人的陷阱,即需要更新函数在文件中所在位置的行号。但这也许可以用宏来解决。