C语言编码风格检查工具

25

我在一家公司工作,该公司有严格的编码规范,但没有自动验证工具。我搜索了一下,发现唯一能找到的工具都是类似于lint工具,看起来是为了验证代码功能和防止错误,而不是确保编码风格正确。

如果需要的话,我们应该使用哪个工具呢?

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

9个回答

16

在每台Unix机器上都可以使用的传统代码美化工具是indent。某些机器上找到的版本是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 

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


10
你正在寻找一个'代码美化工具'。Uncrustify是一个免费的工具。
你只需要在其配置文件中描述你的编码风格,它就会确保每个文件符合所描述的风格。

9

AStyle 可以满足您的需求:

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

Eclipse 有一个 AStyle 插件 可供使用。

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年代中期短暂使用过,但它要求我们进行的更改对管理层来说(非常必要,但是)过于侵入性。


3

从类似的问题中得知:Vera++

Vera++是一个可编程的用于验证、分析和转换C++源代码的工具。

Vera++主要使用场景包括:

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

提供源代码度量和统计信息。

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


@Tino 感谢提醒,已更新(似乎 GitHub 是一个镜像站点,主站在 BitBucket 上)。 - Eugen Constantin Dinca

3

2
尝试使用UniversalIndentGUI,它是一个围绕着流行的缩进器/美化器(如Uncrustify、Artistic Style和GNU Indent)的GUI包装器。其GUI和实时预览功能使得尝试不同的缩进器非常容易,一旦你找到了一个你喜欢的缩进器和配置,你可以导出配置甚至导出一个shell脚本。如果你还在尝试中,这非常棒。

2
我认为在这里不应该使用正式的工具。编码标准的最佳执行方式是同事间互相监督。同事间的互相尊重和压力是团队建设环境中的关键要素......这与某人无意中“破坏构建”时所需的友好骚扰没有什么不同。
对新团队成员代码的审查是学习过程的关键部分,也是融入团队和学习编码标准等的必要条件。如果编码标准太复杂或微妙,以至于无法通过这种方式掌握它们,那么你应该寻找一个新的编码标准,而不是寻找一个验证标准的工具。

1
这就是为什么我建议使用一个美化工具,它可以将文件转换成所需的样式,而不是一个验证器,它根本没有任何好处。你可以按照任何风格编码,在检查之前运行美化工具,以确保符合要求。 - Vinko Vrsalovic
@Vinko - 你可以这样做,这对于兼职贡献者或导入外部代码可能有所帮助,但对于全职团队成员,我真的相信你希望他们都能“按编码标准思考”,这样你才能从一开始就获得编码标准的真正好处。 - Tall Jeff
1
完全同意。进行代码审查并制定良好的编码标准应该可以解决问题。 - Ilya
1
我的观点是,如果没有可用的格式化工具来强制执行规范,则不应以任何方式强制执行任何编码标准。我有自己的美化规则,适用于所有代码操作,然后通常将代码恢复为客户喜欢呈现其代码的任何标准。不幸的是,这样做的一个副作用是,在以前的提交者未遵守标准并且评审人员没有发现时,会出现非打印更改的情况。 - jwdonahue
@jwdonahue 感谢您提供的额外观点。我的大部分思考都涉及长期的专职团队成员。您提出了一个很好的观点,即支持各种标准,每个标准都针对特定客户,同时仍能支持您喜欢的标准。在这方面,我同意自动化肯定会有所帮助。 - Tall Jeff

-8
请使用VIM并享受它的简便性。 您可以通过简单的命令执行与源代码编程相关的任何操作。 还可以通过编辑.vimrc文件使VIM更加可靠和强大。 其中的帮助将对您非常有帮助。
/renjith g

4
你被投票负分是因为原问题是关于代码美化器或样式检查器,而你却回答了文本编辑器。区别在于文本编辑器是编写代码的地方,而样式检查器则独立于所使用的文本编辑器检查源代码的格式。例如,这是一个样式检查器:https://en.wikipedia.org/wiki/Checkstyle - elviejo79

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