【问题标题】:How can I modify the code formatting for C++ in Visual Studio Code?如何在 Visual Studio Code 中修改 C++ 的代码格式?
【发布时间】:2019-02-10 19:33:01
【问题描述】:

到目前为止,安装 C++ 扩展工具后,我可以使用 Ctrl + K + F 来自动格式化我的 C++ 代码。但是,我想做一些修改,例如我想强制指针对齐靠近类型,而不是靠近变量名,比如这个规则:

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

如何进行此修改?我尝试创建一个 .clang 格式的文件,但它不起作用。

【问题讨论】:

  • ctrl+K+F 是核心VS功能,不清楚你在说什么工具。我会说,您应该将其重定向到其他站点(也许是 VS 技术支持?)
  • 我一直对Ctrl + K +F(格式)和Ctrl + K, F(关闭目录)感到困惑。

标签: c++ visual-studio-code code-formatting


【解决方案1】:

经过一些实验,简单的解决方案是在用户设置(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 代替,但搜索此答案以仅覆盖这 2 个设置(列限制和指针对齐):D
  • 所以我有 {BasedOnStyle: Chromium, ColumnLimit: 150, PointerAlignment: Left}
  • 我不明白为什么有人希望将类型信息(例如某物是否为指针)与标识符分组。如果class Student 是一个大型结构,例如100,000 字节大小,那么Student 和指向Student 的指针之间存在很大差异,因为指针通常为4 字节或8 字节,具体取决于架构。这只是考虑到大小的差异,而不是概念上它们是两个非常不同的东西这一事实。
  • @Pulseczar 我实际上更喜欢指针指示靠近标识符而不是类型,因为从语法上讲,这就是语言处理它的方式。如果我有多个标识为一种类型的标识符,则int *p, n;p 声明为int 指针,将n 声明为int。将其写为int* p, n; 似乎在视觉上具有误导性。我想这是主观的。
  • @lurker 这似乎是拆分类型信息的糟糕理由。我想知道为什么 C 的创建者一开始就这样做。感谢您的回复。
【解决方案2】:

我使用clang-format,它集成得很好,并且非常可配置。见https://code.visualstudio.com/docs/cpp/cpp-ide#_code-formatting

【讨论】:

  • 谢谢迈克尔,实际上我已经阅读了文档。今天我发现了这个问题。我在工作区之外(在我的 Windows 用户文件夹内)放置了一个 .clangformat 文件,该文件在一行中包含错误的格式。在我删除它或修复内容后,它再次起作用。我认为这个文件应该没有效果。所以 VS-Code 不只是看管工作空间内的文件。
猜你喜欢
  • 2016-06-26
  • 2018-05-01
  • 2018-09-05
  • 2021-03-02
  • 2021-05-05
  • 1970-01-01
  • 2018-02-26
  • 2016-06-29
相关资源
最近更新 更多