使用Doxygen如何从C代码生成流程图

4
我对Doxygen不熟悉,有几个问题需要澄清:
  1. 我们能否使用Doxygen从C代码生成流程图?
  2. 如果可以,是否需要安装插件?我已经为CallGraph安装了GraphViz。
  3. 如果有任何关于使用Doxygen生成流程图的相关链接,请在此分享。
  4. 如果不行,是否有工具可以同时生成文档和使用C代码生成流程图?
如果您知道答案,请回答我。谢谢!

不要生成流程图流程图今天已经没用了(因为任何现实世界的程序都有太大的流程图)。自20世纪60年代以来,我们使用结构化编程来避免需要流程图(在实践中它们是无用的,因为太大了)。因此,即使您生成它,它也是无法阅读的(这就是为什么您不需要它的原因)。 - Basile Starynkevitch
1
所以看起来你的问题实际上是一个XY问题。你真正的问题是什么?为什么需要生成流程图?为了谁?请编辑你的问题以改进它。否则,它太过宽泛。 - Basile Starynkevitch
是的,实际上我要开发一个自动化文档工具,所以我需要像这样的一些基本工具。 - Easi Test
这不是一个基本工具,正如我在我的回答中所解释的那样,它是完全无用的。不要浪费时间在这上面(当然也不要用于文档编写)。 - Basile Starynkevitch
好的,谢谢你给了一些提示和建议 @Basile Starynkevitch - Easi Test
1
存在一个名为“Moritz”的外部包(https://sourceforge.net/projects/moritz/),它可以基于doxygen结果创建流程图。 - albert
2个回答

1

正如@albert所提到的,我们可以使用C代码生成流程图。以下是从C代码和其他下面提到的语言生成流程图的完整过程链接。

https://sourceforge.net/p/moritz/discussion/572218/thread/6fad0579/?limit=25#4e46

Moritz是著名工具Doxygen的“附加组件”。它生成C/C++源代码中函数和方法的Nassi Shneiderman图表,以HTML文件的形式呈现,可包含在软件文档中或通过HTML浏览器查看。
Moritz提供的功能包括:
  1. Moritz是著名工具Doxygen的“附加组件”。
  2. Moritz支持生成像Nassi Shneiderman或UML活动图这样的图表。
  3. 适用于许多编程语言,如C/C ++,Python,Matlab或Pascal
  4. 作为控制批处理或shell脚本的一种工具链中的一个工具,Moritz可以作为控制批处理或shell脚本的一种工具链中的一个工具。
  5. 通过额外的XML文件进行详细配置。
第二步:
配置设置是生成DOT文件所必需的。
第三步:
我们可以使用Graphviz从DOT文件生成流程图。

0
据我所知,Doxygen不会生成流程图。由于流程图总是太大而无法阅读(它们在20世纪50年代和60年代被使用,当时计算机和程序要小得多),因此流程图今天已经没有用处了。任何实际的程序都有一个至少包含数千个节点的流程图,这是无法阅读的,因此也就无用了。
自20世纪60年代以来,我们使用结构化编程来避免需要流程图。请记住迪科斯彻在1968年发表的论文{{link3:Go to considered harmful}}。
请注意一些事情:许多简单的C宏对应于流程图的某个子部分(大于单个节点)。
您可能想要控制流图。但即使是这样,它也太大而无法阅读(因此在实践中,您可能需要对其进行缩放)。您不需要这个CFG,因为在实践中它也太大了。

你可以开发自己的GCC插件来生成控制流图(或某种流程图),但是(因为C语言有一个预处理器,这就解释了为什么Doxygen无法可靠地生成它),你需要在编译器内部生成它。编写这样的GCC插件可能需要花费数月时间,并且生成的图表很可能太大而无法阅读(因此绝不能出现在用户文档中)。因此,在实践中,您不应该浪费时间开发这种无用的工具。

但是你不需要生成流程图(它们在实践中难以阅读)。

如果您的文档需要流程图,那么您的代码设计就有问题了。要解释一些代码,请考虑在文档中编写pseudocode。或者使用更高级的概念(例如自动机树遍历等)。最多(但这通常是无用的),在您的文档中添加一些非常简化的流程图(然后,当然您需要自己绘制理想化的流程图)。

1
我同意,但这是客户的要求。 - Easi Test
但是从实际大小的程序生成流程图需要数月的工作时间(而且结果毫无用处)。 - Basile Starynkevitch
1
存在一个名为“Moritz”的外部包(https://sourceforge.net/projects/moritz/),它可以基于doxygen结果创建流程图。 - albert
@albert:Moritz 被记录为能够生成“函数和方法的纳西-施耐德曼图”,而这些并不是流程图(但与 CFG 相似)。 - Basile Starynkevitch
当查看Moritz网站(https://sourceforge.net/projects/moritz/)并查看项目示例(中间一个)时,我觉得这看起来像一个流程图。 - albert
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接