gnu缩进的Google c样式设置?

Hon*_*hen 10 c c++ coding-style indentation

我正在为Emacs(google-c-style.el)和Vim(google.vim)使用google c缩进样式.

但是因为我有一些不是这种风格的现有代码,我希望我能改变它.我发现有一个名为GNU indent的工具可以自动执行此操作,它在此页面上提供了一些常见的样式设置,但是没有Google c缩进样式.SO也有同等效力吗?

(我尝试了Linux和Berkley的风格,觉得它们对我来说并不满意)

Hon*_*hen 11

对于记录,对于那些对Clang和LLVM感兴趣的人有一个替代解决方案.

clang-format肯定可以帮助您轻松高效地格式化现有源代码.它有明确的 5格式,即内置支持LLVM(默认), ,Google,Chromium,.MozillaWebKit

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

clang-format -style=Google -i filename
Run Code Online (Sandbox Code Playgroud)

如果-i意味着就地修改,您可以尝试不使用此选项来预览更改.

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

find . -name "*.cc" | xargs clang-format -style=Google -i
Run Code Online (Sandbox Code Playgroud)

除了列出的5种格式之外,实际上还有其他样式GNU(在修订版197138上添加;遗憾的是文档未同步).

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

clang-format -style=Google -dump-config >.clang-format
Run Code Online (Sandbox Code Playgroud)

您也可以使用BasedOnStyle选项,因此配置文件可能如下所示:

---
BasedOnStyle:  Chromium
PointerBindsToType: false
ObjCSpaceAfterProperty: true
...
Run Code Online (Sandbox Code Playgroud)

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

还有IDE /编辑器的集成,例如Visual Studio(目录clang-format-vs),Sublime,Emacs,Vim(所有目录clang格式).

另外3个提示:

  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++标准的功能"),真的值得一试!


jxh*_*jxh 9

谷歌编码风格的简要说明显示它主要是K&R编码风格,除了2个空格缩进(包括案例陈述),80列行和没有标签.因此,以下选项应该实现:

-kr -ci2 -cli2 -i2 -l80 -nut
Run Code Online (Sandbox Code Playgroud)

从那开始.您可能需要调整生成的代码.特别是C++支持很弱indent.

传说:

  • -kr:K&R风格
  • -ci2:延续缩进,多行代码语句的第一行后面的行缩进2个空格
  • -cli2:案例标签缩进,case标签从中缩进2个空格switch
  • -i2:缩进,2个空格
  • -l80:长度,80列
  • -nut:没有标签

作为替代方案,您可以考虑以批处理模式执行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))
Run Code Online (Sandbox Code Playgroud)

从shell执行以下命令:

emacs -batch your_source_file.c \
    -l emacs-format-file -f emacs-format-function
Run Code Online (Sandbox Code Playgroud)