如何在Visual Studio Code中修改C++代码格式?

14

安装了C++扩展工具之后,我现在可以使用Ctrl+K+F自动格式化我的C++代码。然而,我想进行一些修改,例如,我希望强制指针对齐方式靠近类型而不是变量名,就像这个规则:

# Force pointers to the type for C++.
DerivePointerAlignment: false
PointerAlignment: Left

我该如何进行这个修改?我尝试创建了一个.clang-format文件,但它没有起作用。


ctrl+K+F是Visual Studio的核心功能,不清楚您在谈论哪个工具。我建议您将其重定向到其他网站(也许是VS技术支持?) - Swift - Friday Pie
相关:https://dev59.com/oF0a5IYBdhLWcg3wvrAy - handle
我总是混淆 Ctrl + K + F(格式化)和 Ctrl + KF(关闭目录)。 - nomad
2
"C_Cpp.formatting": "vcFormat" 解决了我遇到的这个问题,指针靠近类型而不是标识符。 - dandev486
2个回答

9

在进行了一些实验后,简单的解决方案是在用户设置(settings.json)中添加以下行:

"C_Cpp.clang_format_fallbackStyle": "{ PointerAlignment: Left}"

然而,这个设置允许我保留之前的设置而不破坏我的函数行:

"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: WebKit, ColumnLimit: 120, PointerAlignment: Left}"

使用“BasedOnStyle:Visual Studio”例如此行:

"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Visual Studio, ColumnLimit: 120, PointerAlignment: Left}"

没有起作用。这可能是一个错误。我使用的是Visual Studio Code版本1.26.1。

另外,工作区文件夹外的.clangformat仍将被应用。因此,如果此文件损坏,则自动格式化将无法正常工作。


很有趣,我使用Chromium,但搜索了这个答案来覆盖那两个设置(列限制和指针对齐):D - Lukas Salich
所以我有 {BasedOnStyle: Chromium, ColumnLimit: 150, PointerAlignment: Left} - Lukas Salich
1
我不明白为什么有人想要将类型信息(例如指针或非指针)与标识符分组。 如果class Student是一个大型结构体,比如100,000字节大小,那么一个Student和一个指向Student的指针之间存在很大的区别,因为指针通常是4个字节或8个字节,这取决于架构。而且这只考虑了它们在大小上的差异,没有考虑到它们在概念上是两个非常不同的东西。 - Pulseczar
@Pulseczar,我更喜欢指针标识靠近标识符而不是类型,因为从语法上讲,这就是语言的处理方式。如果我有多个标识符被一个类型所标识,int *p, n; 声明 pint 指针,nint。将其写成 int* p, n; 看起来似乎会产生视觉误导。我想这是主观的。 - lurker
@lurker 这似乎是将类型信息拆分的不充分的原因。我想知道为什么C的创建者一开始就这样做。感谢您的回答。 - Pulseczar
当使用此答案(C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: WebKit, ColumnLimit: 120, PointerAlignment: Left})粘贴函数时,例如复制以下内容并在\n处换行(因为StackOverflow不允许在注释中换行): void func(int& var) {\n return;\n } 并粘贴后,VSCode似乎会将其全部粘贴到一行中: void func(int& var) { return; } 使用“Ctrl+Z”撤消一次可以在粘贴后修复此问题,但您必须每次都这样做。 - CreativiTimothy

4

谢谢Michael,实际上我已经阅读了文档。今天我找到了问题所在。我把.clangformat文件放在工作区之外(在我的Windows用户文件夹内),其中有一行格式错误。在我删除或修复内容后,它又可以正常工作了。我以为这个文件不应该有影响。因此,VS-Code不仅会查找工作区内的文件。 - ywiyogo

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