C++ | clang-format ベーススタイルの比較(整形後コードの比較)

C++ では、clang-format を利用してソースコードの自動フォーマットが可能です。
Visual Studio Code の場合は、C/C++ 拡張機能に clang-format が組み込まれており、Clang_format_fallback Style 項目にてカスタマイズが可能です。

この設定に、”LLVM” や “Google” などの文字列を指定することで、プリセットのベーススタイルを選択することができます。

clang-format にはいくつかのベーススタイルが最初から用意されています。
この記事では、これらの簡単な比較を示します。

目次

各ベーススタイルの比較

none

ベーススタイルを比較するために、次のような改行の少ないソースコードを準備しました。
これに対して自動フォーマットされたものを比較していきます。

C++
#include <iostream>

namespace Project { class MyClass { public: MyClass(int value) : value_(value) {} private: int value_; }; }

int main() { for (std::size_t i = 0; i < 10; ++i) { if (i % 2 == 0) { std::cout << i << " : even" << std::endl; } else { std::cout << i << " : odd" << std::endl; } } return 0; }

Visual Studio

Visual Studio Code 拡張機能に特有のベーススタイルです。
Visual Studio C++ のデフォルトフォーマットっぽい名称ですが、括弧の扱いなどを見るとそういうわけでもなさそうです。

C++
#include <iostream>

namespace Project
{
    class MyClass
    {
    public:
        MyClass(int value) : value_(value) {}

    private:
        int value_;
    };
}

int main()
{
    for (std::size_t i = 0; i < 10; ++i)
    {
        if (i % 2 == 0)
        {
            std::cout << i << " : even" << std::endl;
        }
        else
        {
            std::cout << i << " : odd" << std::endl;
        }
    }
    return 0;
}

LLVM

LLVM Coding Standards に従ったフォーマットです。

C++
#include <iostream>

namespace Project {
class MyClass {
public:
  MyClass(int value) : value_(value) {}

private:
  int value_;
};
} // namespace Project

int main() {
  for (std::size_t i = 0; i < 10; ++i) {
    if (i % 2 == 0) {
      std::cout << i << " : even" << std::endl;
    } else {
      std::cout << i << " : odd" << std::endl;
    }
  }
  return 0;
}

Google

Google C++ Style Guide に従ったフォーマットです。

C++
#include <iostream>

namespace Project {
class MyClass {
 public:
  MyClass(int value) : value_(value) {}

 private:
  int value_;
};
}  // namespace Project

int main() {
  for (std::size_t i = 0; i < 10; ++i) {
    if (i % 2 == 0) {
      std::cout << i << " : even" << std::endl;
    } else {
      std::cout << i << " : odd" << std::endl;
    }
  }
  return 0;
}

Chromium

Chromium coding style に従ったフォーマットです。
ほぼ Google と同じように見えます。

C++
#include <iostream>

namespace Project {
class MyClass {
 public:
  MyClass(int value) : value_(value) {}

 private:
  int value_;
};
}  // namespace Project

int main() {
  for (std::size_t i = 0; i < 10; ++i) {
    if (i % 2 == 0) {
      std::cout << i << " : even" << std::endl;
    } else {
      std::cout << i << " : odd" << std::endl;
    }
  }
  return 0;
}

Mozilla

Mozilla C++ Coding Style に従ったフォーマットです。

C++
#include <iostream>

namespace Project {
class MyClass
{
public:
  MyClass(int value)
    : value_(value)
  {
  }

private:
  int value_;
};
}

int
main()
{
  for (std::size_t i = 0; i < 10; ++i) {
    if (i % 2 == 0) {
      std::cout << i << " : even" << std::endl;
    } else {
      std::cout << i << " : odd" << std::endl;
    }
  }
  return 0;
}

WebKit

WebKit C++ Code Style Guidelines に従ったフォーマットです。

C++
#include <iostream>

namespace Project {
class MyClass {
public:
    MyClass(int value)
        : value_(value)
    {
    }

private:
    int value_;
};
}

int main()
{
    for (std::size_t i = 0; i < 10; ++i) {
        if (i % 2 == 0) {
            std::cout << i << " : even" << std::endl;
        } else {
            std::cout << i << " : odd" << std::endl;
        }
    }
    return 0;
}

Microsoft

Microsoft の C++ Style Guide に従ったフォーマットです。
ただ、該当する Microsoft のページが見当たりません。

C++
#include <iostream>

namespace Project
{
class MyClass
{
  public:
    MyClass(int value) : value_(value)
    {
    }

  private:
    int value_;
};
} // namespace Project

int main()
{
    for (std::size_t i = 0; i < 10; ++i)
    {
        if (i % 2 == 0)
        {
            std::cout << i << " : even" << std::endl;
        }
        else
        {
            std::cout << i << " : odd" << std::endl;
        }
    }
    return 0;
}

GNU

GNU Coding Standards に従ったフォーマットです。

C++
#include <iostream>

namespace Project
{
class MyClass
{
public:
  MyClass (int value) : value_ (value) {}

private:
  int value_;
};
}

int
main ()
{
  for (std::size_t i = 0; i < 10; ++i)
    {
      if (i % 2 == 0)
        {
          std::cout << i << " : even" << std::endl;
        }
      else
        {
          std::cout << i << " : odd" << std::endl;
        }
    }
  return 0;
}
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次