2016-01-11

GCC 6にインデントミスの警告機能が追加

GCC 6にインデントミス警告の機能が追加された。ドキュメントのコミットログは以下の通り。

gcc.gnu.or g Git - gcc.git/blobdiff - gcc/doc/invoke.texi

このインデントミスの警告機能は、-Wmisleading-indentationオプションで有効にできる。

if ( condition )
    foo() ;
    bar() ; // 警告

具体的に説明すると、この機能は、if, else, while, forの中の文がブロック文ではなく、かつ、文に続いて同じインデントのif, else, while, forではない文が続く場合に警告する。

例えば、以下のようなコードは、for文のオペランドとしての文に続いて同じインデントレベルの文が続くが、for文なので警告は出ない。


const std::size_t I = 10, J = 10, K=10 ;
int a[I][J][K]

for ( std::size_t i = 0 ; i != I ; ++i )
for ( std::size_t j = 0 ; j != J ; ++j )
for ( std::size_t k = 0 ; k != K ; ++k ) // 警告なし
{
    a[i][j][k] = 0 ;   
}

この警告は、プリプロセッサーにより生成された結果のコードには適用されない。

if ( condition )
    foo() ;
#if CONDITION
    bar() ; // 警告なし
#endif

理由は、プリプロセッサーによって生成された結果のコードは機械的に生成されたもので、人間が読むものではないから、人間向けのインデントは意味をなさないからだ。

ドワンゴ広告

今日は祝日で休みだ。

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

No comments: