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

如何在VSCode中对代码格式化

打开一个test.cpp文件,按Alt+Shift+F可以对当前文件执行格式化操作,比如

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

文件 - 偏好 - 设置,搜索format, 可以看到一个配置选项,默认为Visual Studio,可以换成LLVMGoogleMozilla等,也可以设置为自定义的配置参数。

  • 如图是我习惯的格式,设置为:{ BasedOnStyle: WebKit, BreakBeforeBraces: Linux}。主要特点是:
    • 4空格缩进
    • if for语句后的大括号{ 在同一行
    • 以及function, class, namespace的风格都比较顺眼
      在这里插入图片描述
  • 参数字段BreakBeforeBraces 是指大括号{ }的位置,有几个值可选:
    • Linux: 最符合我的习惯

      if (...) {
              
              
          printf(...);
      } else {
              
              
          printf(...);
      }
      
    • Stroustrup: C++祖师爷的风格,主要特点是
      描述

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

      if (...) 
      {
              
              
          printf(...);
      } 
      else 
      {
              
              
          printf(...);
      }
      

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

不同格式化风格的主要特点

  • 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 浏览器都是基于这个框架来开发的。

猜你喜欢

转载自blog.csdn.net/weixin_44220976/article/details/142865076