VSCode clang format 代码风格格式化 Alt+Shift+F | Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, Mi

1. 如何在VSCode中对代码格式化

打开一个test.cpp文件,在文件中右击-格式化文档,或按Alt+Shift+F可以对当前文件执行格式化操作(不同VSCode版本的快捷键可能不一样),比如

  • 自动调整缩进
  • 自动调整大括号的位置
  • 自动调整换行限制宽度等

文件 - 偏好 - 设置,搜索clang_format, 可以看到一个配置选项,默认为Visual Studio,可以换成LLVMGoogleMozilla等,也可以设置为自定义的配置参数。
在这里插入图片描述
我习惯的格式为:{BasedOnStyle: WebKit, ColumnLimit: 100, BreakBeforeBraces: Stroustrup, SortIncludes: false, AllowShortFunctionsOnASingleLine: All}。主要特点是:

相关的插件应该只装了微软的3个C/C++插件:
描述

2. 常见的 Base Style - 不同格式化风格的主要特点

  • Visual Studio: 和下面几个的主要区别是命名空间内的东西会有缩进,其他几个都是和namespace同一缩进。
    namespace test
    {
        template <typename T>
        void
        print(T &&t)
        {
            std::cout << t << std::endl;
        }
    
    } // namespace test
    
  • LLVM: template和返回值与函数名在同一行;另外会把单行函数格式化为单行
    template <typename T> void print(T &&t) { std::cout << t << std::endl; }
    
  • Google、Chromium:类的访问限制符publicprivateclass不对齐
    class Test {
     public:
      Test(std::string name) : name_(std::move(name)) {}
    
      void run() {
        std::cout << "Running test " << name_ << "..." << std::endl;
        run_();
        std::cout << "Test " << name_ << " passed." << std::endl;
      }
    
     private:
      std::string name_;
    }
    
  • Mozilla、GNU: 函数定义处,会把函数返回值的类型放到上一行
    template<typename T>
    void
    print(T&& t)
    {
      std::cout << t << std::endl;
    }
    
  • WebKit:和其他几个的主要区别是默认4空格缩进,而且大括号单独一行,其他都是2空格,大括号在行尾,算是最符合我习惯的,调整大括号位置即可
    • WebKit 是一个跨平台的 Web 浏览器引擎,苹果的 Safari、谷歌的 Chrome 浏览器都是基于这个框架来开发的。

3. 其他 clang format 风格选项

https://clang.llvm.org/docs/ClangFormatStyleOptions.html

3.1 大括号位置

  • 可通过参数字段BreakBeforeBraces 指定大括号{}的位置,有几个值可选:
    • Linux: 最符合我的习惯

      if (...) {
          printf(...);
      } else {
          printf(...);
      }
      
    • Stroustrup: C++祖师爷的风格,主要特点是每个分支占有独立的行方便剪切复制分支块,并且不会过多浪费纵向屏幕空间
      描述

      if (...) {
          printf(...);
      } 
      else {
          printf(...);
      }
      
    • Allman: 会把大括号{单独放到下一行,我觉得很浪费纵向屏幕空间,不利于代码的阅读理解

      if (...) 
      {
          printf(...);
      } 
      else 
      {
          printf(...);
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值