2017-01-16 1 views
0

私はそれが非常にばかげた質問だと知っていますが、gccのシステムヘッダとノーマルヘッダの違いはありません。システムヘッダとノーマルヘッダgcc

このlinkに参照のうえ:オペレーティングシステムへのインタフェースを宣言するヘッダファイルと ランタイムライブラリは、多くの場合、厳密したがってC. を準拠して記述することはできません

2.8システムヘッダ

GCCができますシステムヘッダ内に見つかったコード。 GCCがシステムヘッダを処理している間、 '#warning'( 診断を参照)によって生成されたもの以外のすべての警告は抑制されます。 システムヘッダに定義されたマクロは、それらが展開されているところでは、いくつかの警告 の影響を受けません。この免責は、 アドホックで与えられます。システムヘッダーで定義されたマクロのコードのために、警告が多数の誤検出を生成することがわかったとき

通常、特定のディレクトリに見つかったヘッダーのみが、システムヘッダーと見なされるのは です。これらのディレクトリは、GCC がコンパイルされたときに決定されます。以下のためのシステムとして ヘッダを扱われ

ヘッダファイル-isystemと-idirafterコマンドラインオプションと検索パスに追加したディレクトリで見つかった: システムヘッダに通常のヘッダを作成する二つの方法は、しかし、があります診断の目的。 #pragma GCC system_headerというディレクティブもあります。これはGCCに、現在のインクルードファイルの残りの部分をシステムヘッダーであると見なすように指示します。 ファイルは影響を受けていません の '#pragma'の前にあるコードです。 #pragma GCC system_headerは、 のプライマリソースファイルには何の効果もありません。

私は答え可能であれば、システムヘッダの内容の一部を示すと、リンクに警告や特別な治療の種類をについて話していると感謝しています。

答えて

1

システムヘッダは、OSまたはコンパイラに付属するヘッダファイルであり、Unixでは/usr/includeのようなディレクトリにあります。通常のヘッダーは、自分で書いたヘッダーファイルや、ダウンロードしたアプリケーションやライブラリに付属のファイルなど、他のすべてのヘッダーです。

+0

システムヘッダは、Gccコンパイラのデフォルトパスのヘッダです。 – Sabrina

+0

あなたが引用したドキュメントには、「特定のディレクトリ」と書かれています。私はそれがすべてのデフォルトのディレクトリと同じであるかどうかは分かりません。 – Barmar

+0

@Bramar:リンクは 'GCCがコンパイルされたときにこれらのディレクトリが決定されます.'これは、ソースからGCCをコンパイルする場合、これらのディレクトリが何であるかを決定することを意味します。 –

0

what kind of warnings or special treatment is talking about in the link.

これらは、現在の基準の下で推奨されていませんが、システムヘッダが書き込まれた時に許容できると考えられていたCの使用のために発行されている警告です。たとえば、警告you are assigning a string literal to a char*"です。 (今日はconstキーワードを使用して行われます)。

関連する問題