6.3 プラグマを使用したコンパイラの診断メッセージの制御

プラグマを使用すると、コード内で特定の診断メッセージの重大度を非表示、有効、変更することができます。

たとえば、特定の関数のコンパイルの際に、特定の診断メッセージを非表示にできます。

または、コマンドラインオプションを使用してメッセージを非表示にしたり、その重大度を変更したりできますが、変更はコンパイル全体に適用されます。

サンプル

以下のサンプルに、3 つの同じ関数 foo1()foo2()、および foo3() を示します。いずれも通常は診断メッセージ #177-D: variable "x" was declared but never referenced を呼び出します。
foo1() の場合、現在のプラグマの状態がスタックにプッシュされ、#pragma diag_suppress がメッセージを非表示にします。メッセージを再度有効にするには、#pragma pop を使用してから、foo2() をコンパイルします。foo3() では、#pragma push#pragma pop が、メッセージの生成対象となる範囲をすべて囲んでいないため、メッセージは非表示にはなりません。
#pragma push
#pragma diag_suppress 177
void foo1( void )
{
    /* ここでは、非表示に設定したため、診断メッセージは呼び出されません。*/
    int x;
}
#pragma pop

void foo2( void )
{
    /* ここでは、非表示オプションをプッシュ/ポップで囲んでいるため、診断メッセージは呼び出されます。*/
    int x;
}
      
void foo3( void )
{
    #pragma push
    #pragma diag_suppress 177
    /* ここでは、プッシュ/ポップで関数全体を囲む必要があるため、診断メッセージは非表示になりません。*/
    int x;
    #pragma pop
}
診断メッセージが生成されるとき、プラグマの状態が所定の場所で使用されます。プラグマを使用してコード内のメッセージを制御する場合、そのメッセージがいつ生成されるのかを把握する必要があります。例えば、以下のコードは、診断メッセージ #177-D: function "dummy" was declared but never referenced を非表示にするためのものです。
#include <stdio.h>
#pragma push
#pragma diag_suppress 177
static int dummy(void)
{
    printf("This function is never called.");
    return 1;
}
#pragma pop
main(void){
     printf("Hello world!\n");
}
ただし、メッセージ 177 はすべての関数が処理された後で生成されます。したがって、pragma pop がプラグマの状態を復元した後でメッセージが生成され、メッセージ 177 が表示されます。
pragma pushpragma pop を削除すると、メッセージ 177 が正しく非表示になりますが、dummy() 関数だけでなく、参照されない関数すべてのメッセージまで非表示になります。
関連する概念
6.2 コンパイラ診断メッセージの重大度を変更するオプション
6.4 コンパイラ診断メッセージの接頭文字
6.5 コンパイラ終了ステータスコードと終了メッセージ
6.6 コンパイラデータフロー警告
関連する参考文書
6.1 コンパイラ診断メッセージの重大度
10.80 #pragma diag_default tag[,tag,...]
10.81 #pragma diag_error tag[,tag,...]
10.82 #pragma diag_remark tag[,tag,...]
10.83 #pragma diag_suppress tag[,tag,...]
10.84 #pragma diag_warning tag[, tag, ...]
10.98 #pragma pop
10.99 #pragma push
8.57 --diag_error=tag[,tag,...]
8.58 --diag_remark=tag[,tag,...]
8.59 --diag_style=arm|ide|gnu コンパイラオプション
8.60 --diag_suppress=tag[,tag,...]
8.61 --diag_suppress=optimizations
8.62 --diag_warning=tag[,tag,...]
8.63 --diag_warning=optimizations
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.