【问题标题】:Automatic tool for checking code conventions for C/C++ [closed]用于检查 C/C++ 代码约定的自动工具 [关闭]
【发布时间】:2012-01-11 21:35:11
【问题描述】:

我们让学生在课程中提交练习,但他们必须遵守一些代码约定。例如,函数名称应采用驼峰命名法。函数长度不应超过 50 行(任务很简单,可以划分)等。 我正在寻找一种可以自动检查 C/C++ 的工具(两者都需要)。也就是说,我希望该工具在出现问题时进行投诉,以便学生可以修复它。 到目前为止,我一直找不到合适的东西。 如果这个东西是开源的,并且可以根据我们的需要轻松配置,那就没问题了。

【问题讨论】:

  • 您不太可能找到在 C++ 代码中强制执行 camelCase 函数名称的工具,因为占主导地位的风格是 lowercase_with_underscores,并且有大量的偏差者更喜欢 PascalCasing。您最大的希望是可配置的。
  • 为什么要自动执行此操作?你至少可以手动阅读和纠正作业,这是你的工作。你无法量化风格。您可以量化合规性,但这是完全不同的事情。
  • 我们正在量化合规性。我们希望自动执行此操作,因此当学生在其中一个问题上出现错误时,他可以收到一封自动电子邮件来修复它,并将人工检查员的时间留给更严肃的业务。
  • @wildplasser 这可以自动完成,没有必要手动完成。
  • 我认为这实际上是一个非常好的主意。我们的代码在我上大学时被自动检查过。如果您希望代码具有最低可读性,那么像有限大小的函数之类的东西几乎是强制性的。现在,我可以立即识别出我学校某人编写的代码。我最终调整了一些规则,但仍然尽我所能编写高质量的代码。 tsunanet.net/~tsuna/cxxcodingstyle/cxxcodingstyle.pdf

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


【解决方案1】:

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

man 1 indent

安装时。

【讨论】:

  • 并通过与原始文件的差异来运行结果...
  • 缩进不能“强制”函数的最大行数,任何涉及换行的规则都会破坏差异输出......
【解决方案2】:

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

你可能想给 Programming Research 的人打个电话,看看你能不能做到。

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

【讨论】:

  • 根据我的经验,在现实世界中,您必须遵守编码标准。
  • 他不在现实世界,他在大学工作。
【解决方案3】:

有 EditorConfig,看起来它的目标是成为跨各种编辑器强制执行编码标准的工具。支持和功能有限,但这是一个不错的主意。 http://editorconfig.org/

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      AFAIK Visual Studio Premium 和 Ultimate 具有这样的高级选项槽分析和测试工具。但那些不是免费的:(

      【讨论】:

      • 是的,但不幸的是,这对我们的案例没有用处。
      • /analyze 执行静态代码分析。这与样式约定无关。
      【解决方案6】:

      Doxygen 生成的 XML 输出非常容易处理……嗯,至少和在标识符中查找单词边界一样容易。

      【讨论】:

        【解决方案7】:

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

        基本上,这个想法是让 tidy 运行并在另一个 .txt 文件中提供输出,然后可以对其进行解析以仅提供错误输出,您可以获得原始代码行并运行 DIFF :-)

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

        否则你可以尝试使用这些:

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

        它可能会在一定程度上解决这个问题,通过一些编码来进行特定的自动检查。

        【讨论】:

          【解决方案8】:

          在某种程度上取决于所需的详细程度和精度以及投资意愿(无论是自己动手还是花钱请人),您可能想看看 clang:它是 C、C++ 和Object-C 编译器编写的 C++ 公开了其内部数据结构。我使用了一个插件来检查各种错误的代码,不过大多是较小的、吹毛求疵的东西。例如,由于编译器公开了 AST,因此在发现 C 风格转换时发出警告是微不足道的(在 C 代码上可能会有点嘈杂)。

          虽然我没有使用过,clang 显然也可以发出其内部数据结构的 XML 表示。如果您不需要问诸如“A 类是B 的可公开访问的基类”之类的问题(即需要对 AST 进行语义检查的重要问题),那么这可能是获得工具的更简单途径描述。实际上,无论哪种情况,您都可以让您的学生实施检查:如果您有足够多的学生并多次分配相同的检查以确保您至少获得一个好的实施,您可以很快收集一个整洁的集合。 ...如果你的学生和我一样(好吧,我真的不希望你的命运如此糟糕),他们甚至会喜欢这个练习。

          但是,有一点:不要标记任何 C++程序员因为使用 CamelCase! HereIsAsimpleAndImpressiveExampleOfWhyUseOfCamelCaseIsReallyBad: you_have_a_much_easier_time_to_read_this! C++ 程序员倾向于做正确的事。因此,使用像 CamelCase 和 Hungarian Notation 这样的愚蠢可憎的符号。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-10
            • 2012-08-08
            • 1970-01-01
            • 2010-09-24
            • 2011-04-08
            • 2011-07-08
            • 1970-01-01
            相关资源
            最近更新 更多