C++ 17は、属性[[maybe_unused]]を導入しています。
私はこれをGCCとClangの標準化バージョン:__attribute__((unused))と仮定します。私はからの警告を表示したくない未使用の関数について関数の宣言や定義に[[多分未使用]]を入れますか?
、
は私が
関数宣言に属性を指定する必要がありますか?
void maybe_used_function() [[maybe_unused]];
または関数定義?
void maybe_used_function() [[maybe_unused]] {
/* impl */
}
いずれか?どちらも?
標準化された属性とコンパイラ固有の属性の両方で効果が同じになるのでしょうか?
プレースメントの動作、および一般的なプラクティスについての明確なドキュメントは見つかりません。
:
void function();
int main(){}
void function() __attribute__((unused)) {}
警告:GCCがこの位置に「未使用」属性を許可していません に関数定義[-Wgcc-COMPAT] ボイド関数()__attribute __()(未使用){
しかし、属性がエラーなしで二つの他の場所に置くことができます。
__attribute__((unused)) void __attribute__((unused)) function() {}
たぶん、次のいずれかの方法は、私は関数定義の属性を使用すると期待していますどのようにでしょうか? N4606から
*試してみましたが、コンパイラが実際に言っていることを見ましたか? AFAIK、属性は宣言*のみ*になりますが、標準テキストをダブルチェックしませんでした。 –
@JesperJuhl:この場合、コンパイラは間違っています。特に、正しく実装されていても実装されていない可能性がある_upcoming_言語機能について議論するときは、これは珍しいことではありません。 – ildjarn
@ildjarn GCCエラーは '[[maybe_unused]]ではなく' __attribute __((未使用)) 'から発生しました。 Clangも同じことをしているようだ。 –