gnu缩进的Google c样式设置

Google c style settings for gnu indent?

本文关键字:样式 设置 Google 缩进 gnu      更新时间:2023-10-16

我使用谷歌c缩进风格的Emacs (google-c-style.el)和Vim(google. Vim)。

但是因为我有一些现有的代码不是这种风格,我希望我能改变它。我发现有一个叫做GNU缩进的工具可以自动完成这样的事情,它提供了一些通用的样式设置在这个页面上,但是没有为Google c缩进样式。那么它也有等价的吗?

(我尝试了Linux和伯克利风格,感觉它们对我来说绝不是令人满意的)

对于那些对Clang和LLVM感兴趣的人来说,这里有一个替代的解决方案。

clang-format绝对可以帮助您轻松高效地格式化现有源代码。它具有显式内置支持5种格式,即LLVM(默认),Google, Chromium, Mozilla, WebKit

用Google样式格式化文件的简单方法是:

clang-format -style=Google -i filename

其中-i表示就地修改,您可以尝试不使用此选项预览更改。

要批量格式化现有的C/c++代码,我们可以简单地使用如下命令:

find . -name "*.cc" | xargs clang-format -style=Google -i

除了列出的5种格式,实际上还有其他样式,如GNU(在修订197138;很遗憾文件没有同步)。

注意clang-format像一样接受rc文件。clang-format_clang-format在项目中,添加这样一个配置文件(如clang-format的官方教程页面所述)的最简单方法是转储现有格式的配置,如:

clang-format -style=Google -dump-config >.clang-format

也可以使用BasedOnStyle选项,这样配置文件可能看起来像:

---
BasedOnStyle:  Chromium
PointerBindsToType: false
ObjCSpaceAfterProperty: true
...
使用

。clang-format_clang-format作为关键字在Github上搜索,还有其他示例;或者你可以参考这个网站来帮助建立一个。

还集成了ide/编辑器,如Visual Studio(在clang-format-vs目录下),Sublime, Emacs, Vim(都在clang-format目录下)。

  1. 对于Emacs集成(clang-format.el),我个人认为最好为clang-format-buffer绑定键而不是clang-format-region

  2. 对于Mac OSX的自制安装,使用brew install --with-clang, --with-lld, --with-python --HEAD llvm可以获得clang-format支持,其集成文件在$(brew --cache)/llvm--clang--svn-HEAD/tools/clang-format中(奖励:那里甚至有git-clang-format !!)。

  3. clang-extra-tools中还有其他很棒的工具,例如clang-modernize(用于"在适当的情况下自动将针对旧标准编写的c++代码转换为使用最新的c++标准的特性"),真的值得一试!

简单阅读一下google的编码风格就会发现,除了有2个空格缩进(包括case语句)、80列行和没有制表符之外,它基本上是K&R编码风格。因此,以下选项应该可以完成:

-kr -ci2 -cli2 -i2 -l80 -nut

从这个开始。您可能需要调整生成的代码。c++对indent的支持特别弱。

传奇:

  • -kr: K&R style
  • -ci2:继续缩进,多行代码语句的第一行之后的行被缩进2个空格
  • -cli2:大小写标签缩进,case标签从switch
  • 缩进2个空格
  • -i2:缩进,2个空格
  • -l80:长度,80列
  • -nut: No tabs

作为一种选择,你可以考虑在批处理模式下执行emacs来为你的代码应用缩进。简要:

创建一个名为emacs-format-file的文件,内容为:

(defun emacs-format-function ()
   "Format the whole buffer."
   (c-set-style "Google")
   (indent-region (point-min) (point-max) nil)
   (untabify (point-min) (point-max))
   (save-buffer))

在shell中执行以下命令:

emacs -batch your_source_file.c 
    -l emacs-format-file -f emacs-format-function