1

次の形式の Blitz++ をコンパイルするときに表示される警告をクリーンアップしようとしています。

/opt/local/include/blitz/tinyvec2.h:261:35: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
/opt/local/include/blitz/tinyvec2.h:264:43: warning: type qualifiers ignored on function return type [-Wignored-qualifiers] 
/opt/local/include/blitz/tinyvec2.h:267:40: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
<<etc.>>

TinyVectorこのような(クラスの)メンバー関数から

T_numtype * restrict data()    // line 261                      
    { return data_; }          // data is a member that is an array of data values

const T_numtype * restrict data() const       // line 264       
    { return data_; }       

私が知る限り、restrictキーワードが原因で警告が表示されます。注:restrict__restrict__(g++ が理解する) に置き換えるマクロがあります。

キーワードを削除することで、警告を取り除くことができます。ただし、これは高性能の数値ライブラリであると想定されているため、restrictキーワードが許可するコンパイラの最適化を失いたくありません。

restrictを完全に削除せずにこれらの警告を抑制するにはどうすればよい-Wallですか?

4

1 に答える 1

4

README

__restrict__戻り値の型は使用されません。これがまさにgcc診断を提供する理由です。このキーワードは、関数に渡された 2 つのポインターが同じオブジェクトを指していないことを通知するために使用されます。それらがユニークであること。一方を変更しても他方には影響しません。これにより最適化が大幅に改善されますが、関数の戻り値には影響しないことに注意してください。

__restrict__返品型に適用する理由はありません。

上記のREADMEは私が書いたものです。含まれている情報は目前の問題にとって重要であるため、引用を使用 して特別な注意を引くようにしました..


gcc 固有のプラグマを使用して警告を無視する

診断プラグマを使用して、gcc診断マッチングを無視するように要求できます。-Wignored-qualifiers


どこでも無視

-Wignored-qualifiersこれにより、有効になるすべての警告が無視されます。

#pragma GCC diagnostic ignored "-Wignored-qualifiers"

選択した領域では無視する

-Wignored-qualifiersこれにより、置き換えられたコードの関連する警告が無視されます。...

... // warnings enabled

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wignored-qualifiers"

... // warning disabled here

#pragma GCC diagnostic pop

... // warnings enabled again

:はではなく-Wignored-qualifiersで有効になります。-Wextra-Wall

于 2014-05-30T19:08:11.923 に答える