Visual Studio 2010 C++代码格式化工具

19

我是 Visual Studio 中 C++ 编程的新手。在 VS 中编写 C# 程序时,代码格式化程序会更改以下代码:

for(int i= 0; i<(n+  m) ;  i++){
}

进入

for(int i = 0; i < (n + m); i++)
{
}

使用其他语言写的代码可以轻松阅读。当我用C++写同样的代码时,什么都没有发生。我尝试选择文本并按Ctrl+E、F键,但没有作用。有没有办法改善Visual Studio中的C++代码格式化器呢?


根据您的配置,同一个功能可能只是按键组合不同而已。我记得它是 (Ctrl-A) Ctrl-K Ctrl-F(或 Ctrl-Shift-F...我不确定)。 - gimpf
2
Ctrl-A,然后Ctrl-K,Ctrl-F确实可以进行“自动格式化”。但是,在C++中的自动格式化只会正确缩进代码,而不会执行任何高级操作,例如间距或确保括号正确缩进。它只会解决制表符缩进级别。 - Dominic K
4个回答

9

Visual Studio无法格式化C++代码。也许有一个VS扩展程序,但我搜索了很久都没有找到一个合适的免费工具。

一个非常好用的、免费的,但使用不太容易的代码格式化工具是GreatCode。它是一个命令行工具。

您可以将其配置为"External Tool":

在将GreatCode解压缩到硬盘上后,只需单击“工具”->“外部工具”->“添加”,并插入以下设置...

enter image description here

每当您调用该工具时,正在打开的实际文件都将被格式化。

您可以在gc.cfg中按照自己的喜好配置GreatCode。我尝试了很多选项,有些很简单,有些则比较复杂。

如果您想要微软风格的外观,只需使用我的设置作为模板,并进行微调:

-code_constructor_style-1
-code_split_fctdef_style-5
-code_split_decl_style-2
-overwrite_read_only-
-verbose-
-tab_out-
-space_if-
-space_return-
-space_fctcall_inparam-
-no-space_fctcall_firstparam-
-no-space_cast_after-
-space_affect_style-0
-space_autoaffect_style-0
-code_len-180
-code_keep_more_empty_lines-
-code_decl_access_to_type-
-code_decl_break_template-
-code_remove_return_paren-
-code_align_max_blanks-80
-code_class_access_eol_after-1
-code_class_access_eol_before-1
-code_split_fctcall_style-1
-code_constructor_style-1
-no-code_split_bool_before-
-no-stmt_concat_else_if-
-no-stmt_decl_remove_empty-
-no-stmt_concat_if_remove_empty-
-no-stmt_concat_else_if-
-stmt_force_brace-1
-stmt_break_dowhile-
-stmt_switch_style-1
-stmt_switch_eol-0
-stmt_class_indent-0
-stmt_static_init_style-2
-stmt_concat_inline_class-
-pp_align_to_code-
-pp_style-1
-pp_align_breakline-
-no-cmt_first_space_cpp-
-cmt_dont_modify-
-no-cmt_add_class_access-
-no-cmt_add_gc_tag-
-no-cmt_add_fct_def_class-
-no-cmt_decl_before-
-no-cmt_decl-
-no-cmt_first_line_break_first-
-no-cmt_first_line_break_last-
-no-code_split_bool_before-
-catch_eol_before-1
-no-stmt_decl_remove_empty-
-no-cmt_add_fct_def_class-
-no-cmt_add_class_access-
-no-stmt_break_alone-
-stmt_concat_inline_class-
-cmt_keep_cpp-

祝你好运!


1
为什么不将您的cfg文件复制并粘贴到您的回答中呢?这会使您的回答更有用。 - In silico

8
我使用的方法和DirkMausF完全一样,只是使用了不同的格式化工具。我建议你使用Artistic Style格式化工具:http://astyle.sourceforge.net/。它有详细的说明文档,并且带有许多预定义的格式化样式,非常容易使用。

有一个扩展可以将Artistic Styler与VS2010和VS2012集成在一起。它叫做AStyle,您可以通过“工具”菜单上的“扩展”项或从此处获取:http://tinyurl.com/8ardana。 - casterle
1
未来用户注意事项:1.您需要为AStyle的格式化文档分配一个键盘快捷方式;2.在更改任何内容之前,请阅读他们的文档。http://astyle.sourceforge.net/astyle.html#_Bracket_Style_Options 顺便说一下,我喜欢Java括号选项。在CSS和C#中称为半展开。 - Achilles
我搜索了很多方法,尝试了很多方法,包括GC.exe。但是这个AStyle真的非常好。请查看它的文档,非常详细。每个选项的“过去”和“现在”都可以清楚地看到。感谢分享这个。 - Elliot Chen

0
很长一段时间,我都是在Netbeans中编写所有的C++代码,并在Visual Studio中进行编译。Netbeans可以完美地格式化代码(使用ALT+SHIFT+F),并且有许多格式化选项。

0

如果你有经费可以花费,你可能想要了解一下Visual Assist。另请参见this问题。


2
它似乎有很多好处,但格式化代码并不是它所“宣传”的功能之一... - Martin Schröder

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