関数に開き括弧を付けることに興味があります(ifステートメントやその他のコンテキストは対象外です)。例えば
void foo()
{
...
}
Flamewarsはさておき、notを実行するための良い根拠はありますか?私はif/elseと小さいブロックに同じ行のオープンブラケットを使用していますが、この場合、コードのより大きな単位(関数/メソッド/クラス/構造体)の視覚的な整理が完全な一貫性よりも優れていると思います。
さらに、どのように私はclang-formatがこのスタイルに従うようにしますか?
documentation が示すように、clang-format
を-style=file
で呼び出し、囲みディレクトリに配置された.clang-format
ファイルを使用してスタイルオプションをカスタマイズします。ブレースの配置を指定するフォーマットスタイルオプションは、BreakBeforeBraces
と呼ばれます。ドキュメントから、
BreakBeforeBraces(
BraceBreakingStyle
)使用するブレースブレイキングスタイル。
可能な値:
BS_Attach
(構成:Attach
)常に前後のコンテキストに中括弧を付けます。BS_Linux
(構成:Linux
)Attach
と似ていますが、関数、名前空間、およびクラス定義の括弧の前で中断します。BS_Stroustrup
(構成内:Stroustrup
)Attach
に似ていますが、関数定義の前で中断し、「else」です。BS_Allman
(構成:Allman
)中括弧の前で常に中断します。BS_GNU
(構成内:GNU
)中括弧の前で常に改行し、クラス、関数、またはその他の定義ではなく、制御ステートメントの中括弧に追加レベルのインデントを追加します。
説明に一致するスタイルはBS_Stroustrup
です。次のエントリを.clang-format
に追加します
BreakBeforeBraces: Stroustrup
ドキュメントに加えて、 clangformat.com はすべてのオプションをリストし、それらの多くを例とともに示します。
Pradhanには 優れた答え がありますが、(私が見つけたように)必要のない場所で休憩をとることがあります。
少なくともclang形式のバージョン3.8および5には、「カスタム」という別のオプションがあります(3.8を使用していて、5つのドキュメントでBS_Customを見つけました)。これにより、BraceWrappingで「AfterFunction」オプションを含め、必要なものを指定できます。
次の例の抜粋では、OPの質問でAfterFunctionのみが指定されているため(つまり、「関数の括弧を開く前」)、他のユーザーをtrue/falseとしてリストしています。
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true/false
AfterFunction: true
AfterNamespace: true/false
AfterObjCDeclaration: true/false
AfterStruct: true/false
AfterUnion: true/false
BeforeCatch: true/false
BeforeElse: true/false
IndentBraces: true/false
BreakBeforeBraces: Custom
私はこれを自分の構成でテストしましたが、ブレースの破損をより細かく制御できます。