
私は標準のCヘッダーファイル/usr/include
(例えばstdio.h
、、stdlib.h
など)に精通しています。今、私はそれが他のものよりも新しく、ただC99の一部であることを知っています。しかし - はい、そうです。string.h
ctype.h
stdbool.h
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stdbool.h
/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdbool.h
/usr/lib/gcc/x86_64-linux-gnu/5/include/stdbool.h
各GCCバージョンごとに場所が異なります。なぜそんなことですか?結局、これは標準なので、あるGCCバージョンから次のバージョンに変更しないでください。そしてもちろん、バージョン間に実質的な違いはありません。 (*)なぜこの1つはコンパイラに固有のもので、もう1つはシステム全体に適用されますか?
* - いいえ、著作権表示とC ++で使用するためのCPLUSPLUSバージョンベースの一部のifdefです。
答え1
結局、これは標準なので、あるGCCバージョンから次のバージョンに変更しないでください。
いいえいいえ標準。標準はあなたが書くことができるということです
#include <stdbool.h>翻訳単位内では、特定の事項に影響を与えます。保証なし言語標準の観点からヘッダーはファイルです。言うまでもなく、コンピュータファイルシステムの特定のディレクトリに固定されたコンテンツを含むファイルです。
これらの標準ヘッダーの要点は、包含時に提供されるべきであると言われており、言語標準に記載されている内容を提供するためにC / C ++コンパイラに適したすべてのタスクを実行することです。 (通常)必要な宣言とマクロを提供するために、コンパイラが提供する内部キーワード、プラグマ、マクロ、および組み込み関数を使用します。もちろん、これはコンパイラによって異なります。
これがここで犯す2番目の間違いです。 GCCが唯一のC / C ++コンパイラだと思うのは近視眼的な間違いです。おそらく、多くのコンパイラを持つ古いDOSまたはWin32プログラミングの背景を持つ人々非常にアイデアに慣れる標準ヘッダファイルはコンパイラと密接に関連しています。。たとえば、Watcom C/C++ から標準ヘッダーを取得し、Borland、Microsoft、IBM、またはその他の C/C++ コンパイラと一緒に使用することはできません。
これが取るべきアイデアです。これはあなたにも当てはまります。目的を達成するために標準ヘッダーで実行する必要があるのは、GCCバージョンによって異なりますが、返品(たとえば)clangとGCCの間に違いがあるかもしれません。 UnixとLinuxのオペレーティングシステムいいえシングルコンパイラシングルカルチャー。
実際にはfloat.h
、、、、、およびlimits.h
他のいくつかの標準ヘッダファイルがこれらのコンパイラ固有の場所にあることがわかります stdint.h
。これは、コンパイラ関連の知識とターゲットプラットフォーム関連の知識の両方を含むため、特に混乱しています。stddef.h
stdarg.h
limits.h
追加読書
- 「4.1.2 標準タイトル」。 国家情報システム標準の基礎 - プログラミング言語 - C。
- ビヤンシュトラフロップ(2013)。 「標準ライブラリヘッダ」。C++プログラミング言語。第4版。アディソン - ウェスリー。 ISBN 9780133522853.
- ジョナサンデボインポラード(2012)。C / C ++の定義済みマクロは、利用可能な言語機能を教えてくれます。。一般的な答え。
答え2
UNIXシリーズシステムでは、Cコンパイラ(通常gcc)とC標準ライブラリ(通常glibc)の間に違いがあります。他の多くのオペレーティングシステムとは異なり、UNIXシリーズシステムのC標準ライブラリは、基本的なオペレーティングシステムインタフェースライブラリとしても機能します。
C標準を読むことは、コンパイラとプラットフォームを「実装」にまとめるので役に立ちません。
いくつかのヘッダファイルは、Cライブラリ機能へのインタフェースを提供することが目的であるため、Cライブラリに「属する」。これらのヘッダーファイルはCライブラリによってインストールされ、/usr/includeに配置されます。
他のヘッダはコンパイラ機能を記述するので、Cコンパイラに「属する」。ディストリビューションは通常複数のCコンパイラをサポートしているため、コンパイラ固有の場所に配置されます。