この C++ ディレクティブは何をしますか: "#pragma GCC system_header"?
2 に答える
私はグーグルでこれを得ました:
#pragma GCC system_headerThis pragma takes no arguments. It causes the rest of the code in the current file to be treated as if it came from a system header. Section 2.7 System Headers.
2.7. システム ヘッダー
オペレーティング システムとランタイム ライブラリへのインターフェイスを宣言するヘッダー ファイルは、多くの場合、厳密に準拠した C では記述できません。したがって、GCC では、システム ヘッダーにあるコードを特別に扱います。GCC がシステム ヘッダーを処理している間は、#warning (Chapter 5 Diagnostics) によって生成される警告以外のすべての警告が抑制されます。システム ヘッダーで定義されたマクロは、どこに展開されても、いくつかの警告の影響を受けません。この免責は、システム ヘッダーで定義されたマクロのコードが原因で、警告が多くの誤検出を生成することがわかった場合に、アドホック ベースで付与されます。
通常、特定のディレクトリにあるヘッダーのみがシステム ヘッダーと見なされます。これらのディレクトリは、GCC のコンパイル時に決定されます。ただし、通常のヘッダーをシステム ヘッダーにする方法は 2 つあります。
-isystem コマンド ライン オプションは、-I と同様に、引数をディレクトリのリストに追加してヘッダーを検索します。そのディレクトリにあるヘッダーは、システム ヘッダーと見なされます。
-isystem で指定されたすべてのディレクトリは、コマンド ラインでの順序に関係なく、-I で指定されたすべてのディレクトリの後に検索されます。-I と -isystem の両方で同じディレクトリが指定されている場合、-I オプションは無視されます。-v が使用されている場合、GCC はこれが発生したときに情報メッセージを提供します。
また、ディレクティブ #pragma GCC system_header もあります。これは、現在のインクルード ファイルの残りの部分をシステム ヘッダーと見なすように GCC に指示します。ファイル内の #pragma の前にあるコードは影響を受けません。#pragma GCC system_header は、プライマリ ソース ファイルでは効果がありません。
非常に古いシステムでは、事前定義されたシステム ヘッダー ディレクトリの一部がさらに特別に扱われます。GNU C++ は、これらのディレクトリにあるヘッダー内のコードが extern "C" ブロックで囲まれていると見なします。
#pragma、またはコマンド ラインからこの動作を要求する方法はありません 。
この時点を過ぎたものはすべて、システム ヘッダーにあるかのように扱われます。つまり、#warning 以外のすべての警告が抑制されます