5

この C++ ディレクティブは何をしますか: "#pragma GCC system_header"?

4

2 に答える 2

21

私はグーグルでこれを得ました

#pragma GCC system_header

This 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、またはコマンド ラインからこの動作を要求する方法はありません 。

于 2009-09-25T15:49:58.710 に答える
6

この時点を過ぎたものはすべて、システム ヘッダーにあるかのように扱われます。つまり、#warning 以外のすべての警告が抑制されます

于 2009-09-25T15:52:25.447 に答える