【问题标题】:Coding style checker for CC 的编码风格检查器
【发布时间】:2009-01-04 16:46:06
【问题描述】:

我在一家拥有严格编码风格准则但没有自动验证它们的工具的公司工作。我环顾四周,我能找到的唯一工具是类似 lint 的工具,它们似乎旨在验证代码的功能,防止错误,而不是确保编码风格正确。

如果有的话,我们应该使用什么工具?

注意:我正在寻找适用于 C 代码的东西,尽管适用于 C++ 的东西也会很好。

【问题讨论】:

    标签: c coding-style


    【解决方案1】:

    传统美化器indent,可在每台 Unix 机器上使用。在一些上找到的版本是GNU indent,可以在每台机器上编译安装。 GNU indent 可以从文件~/.indent.pro 中读取一组规则,例如:

    --original --dont-format-first-column-comments --no-blank-lines-after-commas --parameter-indentation 8 --indent-level 8 --line-length 85 --no-space-after-parentheses --no-comment-delimiters-on-blank-lines 
    

    因此,在提交之前运行缩进可以保证呈现的一致性。如果您想强制执行它,请在您使用的版本控制系统中定义一个预提交挂钩,如果提交的版本与缩进产生的版本不同,它将运行缩进并拒绝提交。

    【讨论】:

      【解决方案2】:

      您正在寻找“code beautifier”。 Uncrustify 是免费的。

      您只需能够在其配置文件中描述您的编码风格,它将确保每个文件都符合所描述的风格。

      【讨论】:

        【解决方案3】:

        AStyle 做你想做的事:

        Artistic Style 是用于 C、C++、C# 和 Java 编程语言的源代码缩进器、格式化程序和美化器。

        有一个可用于 Eclipse 的 AStyle Plugin。

        Eclipse 也有代码格式化程序,但我不确定它是否适用于 CDT。

        【讨论】:

          【解决方案4】:

          有(或曾经)有很多工具可以做到这一点。最古老的一个是 cb(C 美化器),它出现在古代 Unix 版本中 - 意思是,在这种情况下,版本 7 Unix:

          CB ( 1 ) UNIX Programmer’s Manual CB ( 1 )
          
          NAME
              cb – C program beautifier
          SYNOPSIS
              cb
          DESCRIPTION
             Cb places a copy of the C program from the standard input on the standard
             output with spacing and indentation that displays the structure of the
             program.
          BUGS
          

          GNU indent 是一个更加复杂和可配置的野兽。也有商业工具。比如Abraxas Software提供了一个CodeCheck工具,例如;我们在 90 年代中期曾短暂使用过它,但它希望我们做出的改变(非常必要,但)对管理来说太麻烦了。

          【讨论】:

            【解决方案5】:

            您可以使用clang-format。更多信息可以在官方网站上找到: http://clang.llvm.org/docs/ClangFormat.html

            【讨论】:

              【解决方案6】:

              来自类似问题:Vera++:

              Vera++ 是用于验证、分析和 C++源代码的转换。

              预计 Vera++ 的主要使用场景有:

              确保源代码符合给定的编码标准 和约定。

              提供源代码指标和统计数据。

              执行源代码的自动转换,范围从漂亮的打印到诊断,再到故障注入和高级测试。

              【讨论】:

              • @Tino Tnx 的注释,已更新(看起来 GitHub 是一面镜子,而主站点在 BitBucket 上)。
              【解决方案7】:

              我反对在这里使用正式的工具。编码标准的最佳执行是同侪压力。团队成员之间的同侪压力和相互尊重是团队建设环境的关键要素......与有人无意中“破坏构建”时所必需的善意骚扰没有什么不同,等等。

              审查新团队成员的代码是学习过程和融入团队以及学习编码标准等的关键部分。如果编码标准过于复杂或微妙而无法通过这种方式学习,那么改为在寻找验证标准的工具时,您应该寻找新的编码标准。

              【讨论】:

              • 这就是为什么我建议使用美化器来获取所需样式的文件,而不是验证器,这根本没有用。您可以使用任何您想要的样式进行编码,并且在签入之前,您可以运行美化器以确保符合要求。
              • @Vinko - 你可以这样做,这对兼职贡献者或导​​入外部代码可能会有所帮助,但对于全职团队成员,我真的相信你希望他们都“思考”编码标准”,以便您从一开始就获得编码标准的真正好处。
              • 不能再同意了。代码审查和明确的编码标准应该可以完成这项工作。
              • 我的观点是,如果没有可用于强制一致性的美化器,则不应以任何方式强制执行任何编码标准。我有自己的美化规则,用于所有代码操作,然后我通常将代码恢复为客户喜欢的任何标准,以显示他们的代码。不幸的副作用是非打印更改经常出现在检查中-在以前的提交者未能遵守标准并且审阅者错过时。
              • @jwdonahue 感谢您提供额外的视角。我的大部分想法都与长期敬业的团队成员有关。关于支持各种标准,您提出了一个很好的观点,每个标准都特定于客户,同时仍然能够支持您喜欢的标准。在那里,一些自动化肯定会有所帮助,我同意。
              【解决方案8】:

              试试UniversalIndentGUI,它是一个围绕流行的缩进器/美化器(例如 Uncrustify、Artistic Style 和 GNU Indent)的 GUI 包装器。它的 GUI 和实时预览功能使尝试不同的压头变得非常容易,一旦你找到了你喜欢的压头和配置,你可以导出配置甚至导出一个 shell 脚本。如果您仍在尝试,那就太好了。

              【讨论】:

                【解决方案9】:

                请使用 VIM 并享受轻松。 你可以通过简单的命令来做任何与源代码编程相关的事情。 您还可以通过编辑 .vimrc 文件使 VIM 更加可靠和强大。 里面的帮助对你有很大帮助。

                /伦吉斯 g

                【讨论】:

                • 您被否决了,因为最初的问题是关于代码漂亮的打印机或样式检查器。你正在用文本编辑器回答。不同之处在于文本编辑器是您编写代码的地方,样式检查器会独立于所使用的文本编辑器检查源代码的格式。例如,这是一个样式检查器:en.wikipedia.org/wiki/Checkstyle
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-05-27
                • 1970-01-01
                • 2010-10-20
                • 2010-12-17
                • 2010-11-15
                • 1970-01-01
                • 2018-10-22
                相关资源
                最近更新 更多