用于检查C / C ++代码约定的自动工具

时间:2012-01-11 21:35:12

标签: c++ c coding-style automation naming-conventions

我们让学生在课程中提交练习,同时他们必须遵守一些代码约定。例如,函数名称应该在camelCase中。功能长度不应超过50行(任务很简单,可以划分)等。 我正在寻找一种可以自动检查C / C ++的工具(两者都需要)。也就是说,我希望该工具在出现问题时进行投诉,以便学生能够解决问题。 到目前为止,我一直无法找到合适的东西。 如果这个东西是开源的,可以很容易地配置为我们的需求,将是o.k。

8 个答案:

答案 0 :(得分:2)

您可以使用unix工具indent 强制某些C编码风格。

man 1 indent

安装时。

答案 1 :(得分:1)

这些工具中的一个,只需最少的定制,就可以完成这项工作:

C ++的可编程验证和分析工具:https://bitbucket.org/verateam/vera/wiki/Home
Google C ++规范检查器:http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py
EPITA大学规范检查员(学生项目):http://code.google.com/p/norme-checker/source/browse/

答案 2 :(得分:1)

QA-CPP可能对此有所帮助。我使用它已经过了一年多,但你可以配置它来做那种事情。

您可能想给编程研究人员打电话,并检查您是否可以这样做。

但问题仍然存在?如果我的讲师开始指责我的代码风格而不是功能,我会认为他松了一口气。作为一个经历过大学系统的人,你应该为他们在现实世界中工作做好准备 - 天堂知道我看到的东西现在经历了很多不足之处。

答案 3 :(得分:1)

有EditorConfig,它看起来像是一个在各种编辑器中强制执行编码标准的工具。支持和功能有限,但这是一个非常好的主意。 http://editorconfig.org/

答案 4 :(得分:0)

AFAIK视觉工作室premium和ultimate具有这样的高级选项槽分析和测试工具。但那些不是免费的:(

答案 5 :(得分:0)

Doxygen产生的XML输出非常容易处理......好吧,至少就像在标识符中查找字边界一样简单。

答案 6 :(得分:0)

您可以在调试模式下使用TIDY,并使用一些shell / perl脚本。

基本上,我们的想法是让整洁运行并在另一个.txt文件中提供输出,然后可以解析该文件以仅提供错误输出,您可以获取原始代码行并运行DIFF: - )< / p>

可能需要一些编码和脚本才能正确完成。我们使用类似的东西,但是用于完全不同的项目和目标。

否则你可以尝试使用它们:

http://gcgreatcode.sourceforge.net/
http://universalindent.sourceforge.net/

这可能有点帮助解决问题,通过一些编码来进行特定的自动检查。

答案 7 :(得分:0)

有些取决于所需的细节和精确程度以及投资意愿(要么自己动手做,要么付钱给某人付钱),你可能要看看clang:它是C,C ++和Object-C编译器编写的C ++,它暴露了它的内部数据结构。我使用了一个插件来检查各种错误的代码,但大多数是较小的,挑剔的东西。由于编译器暴露了一个AST,例如,当找到C风格的强制转换时,它会发出警告(在C代码上可能会有点噪音)。

虽然我没有使用它,但clang显然也​​可以发出其内部数据结构的XML表示。如果你不需要问诸如“是A类是B的可公开访问的基类”(例如需要对AST进行语义检查的非平凡问题),这可能是一条更容易的道路到你描述的工具。实际上,在任何一种情况下,您都可以让学生实施检查:如果您有足够的学生并且多次分配相同的检查以确保您至少获得一个良好的实施,您可以很快收集整齐的收集。 ......如果你的学生和我一样(好吧,我真的不希望你的命运如此糟糕),他们甚至会喜欢这项运动。

但有一件事:使用CamelCase标记任何 C ++程序员! HereIsASimpleAndImpressiveExampleOfWhyUseOfCamelCaseIsReallyBad:you_have_a_much_easier_time_to_read_this! C ++程序员倾向于做正确的事。因此,像CamelCase和匈牙利表示法这样的愚蠢的可憎行为