C++ – clang-format の使い方、全オプションを解説

目次

概要

C++ のフォーマットツール clang-format 及び Visual Studio Code での使い方について解説します。

clang-format

LLVM に付属している主に C++ をターゲットとしたフォーマットツールです。.clang-format という名前の設定ファイルに yaml 形式で設定を記述することで、細かくフォーマット方法を制御できます。

.clang-format の例

BasedOnStyle: LLVM
AccessModifierOffset: -4
ColumnLimit: 80
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
DeriveLineEnding: true
IndentCaseBlocks: true
IndentCaseLabels: false
Language: Cpp
Standard: c++14
BraceWrapping: Custom
  IndentBraces: true

Visual Studio Code で clang-format を使う方法

Visual Studio Code (VS Code) で使用する方法について解説します。他の IDE やエディタで使用する場合は ClangFormat を参照ください。 VS Code の拡張「C/C++」をインストールすると、clang-format のバイナリが付属しています。

clang-format を実行すると、カレントディレクトリから設定ファイル .clang-format が見つかるまで、親ディレクトリを辿って検索し、最初に見つかった設定ファイルが適用されます。そのため、.clang-format を作成し、プロジェクトのルートディレクトリに配置することをおすすめします。

プロジェクトのディレクトリ構成例

my_project
├─ CMakeLists.txt
├─ .clang-format
└─ src
     └─ main.cpp

VS Code では Shift + Alt + F で開いているファイルに対して、フォーマットが実行できます。 また、貼り付け時にフォーマットを実行する「Format On Paste」、保存時にフォーマットを行う「Format On Save」という設定項目もあるので、必要に応じて有効にしてください。

.clang-format の作成方法

100個以上のオプションがあり、特に指定していないオプションは、ベースとなるフォーマットスタイル BasedOnStyle が適用されます。 まずは、デフォルト設定を決める BasedOnStyle を「LLVM/Google/Chromium/Mozilla/WebKit/Microsoft/GNU」から選択し、好みに応じて、個別の設定項目を追加するやり方で設定ファイルを作成します。

# デフォルト設定
BasedOnStyle: LLVM
# インデント幅
IndentWidth: 4
# 言語
Language: Cpp
Standard: Auto
# 1行あたりの
ColumnLimit: 120
# 改行コード
UseCRLF: false
# 個別の設定項目を以下似追加
# AccessModifierOffset: -4

全パラメータは Clang-Format Style Options に記載されています。

clang-format-editor

日本語の解説を見ながら、.clang-format を作成できるツール clang-format-editor を用意したので、こちらで説明を見ながら、自分に合った設定を探してください。

Clang Format Editor

  • 機能

    • EN / JP: 説明を表示する言語を設定します。
    • UPLOAD (アップロード): 既存の .clang-format ファイルをアップロードすることで、設定を読み込みます。
    • SAVE (保存): 設定を .clang-format ファイルとして保存します。
    • RESET (リセット): 設定を初期化します。
  • 使い方

    1. すでに手元に .clang-format ファイルが存在する場合、「UPLOAD (アップロード)」ボタンをクリックしてアップロードします。
    2. 設定したいオプションの値を選択します。何も設定していないオプションはデフォルトになります。
    3. 「SAVE (保存)」ボタンをクリックし、clang-format ファイルをダウンロードします。ダウンロード後にファイル名の先頭にドットをつけて、.clang-format ファイルにリネームしてください。(ブラウザの仕様上、ドットから始まるファイル名は使用できないため)
  • 更新履歴

    • v0.2.0 (2021/6/5): .clang-format のアップロード機能を追加
    • v0.3.0 (2021/8/28): clang-format 13 に対応

コメント

コメント一覧 (0件)

  • clang-format-editor 素晴らしいですね。
    欲を言えば既存設定をアップロードまたはペーストして再編集できるとありがたいです。

    • コメントありがとうございます。
      たしかに既存設定を編集できたら便利だと思うので、今後のバージョンアップの際に機能追加しようと思います。

      —-

      2021/06/22: 既存の設定ファイルのアップロード機能を実装しました。

  • clang-format-editor すごく便利です!
    ところで PointerAlignment の日本語の説明が左右逆になってるように見えます… Left だと右に空白が入ると思います。

    • コメントありがとうございます。
      日本語の説明が間違っていた点を修正しました。

    • コメントありがとうございます。
      ご指摘いただいた点を修正しました。

コメントする

目次