特定のヘッダーファイルが取り出すその他のヘッダーを知りたい場合は、インクルードファイルを完全にコンパイルするのではなく、コンパイラのプリプロセッサフェーズで実行するのが最も簡単な方法です。あなたは<iostream>
がで引っ張るかを知りたい場合たとえば、だけ含まれているファイルを作成します。
#include <iostream>
はそれを前処理します。 gcc
を指定すると、-E
オプションはファイルをコンパイルせずにプリプロセッサのみを実行し、前処理されたファイルを標準出力にダンプします。結果は次のようになります。
# 1 "t.C"
これは私の1行のソースファイルです。
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
どうやら、gcc
は自動的にどんな、このヘッダファイルに引っ張るん。これは無視することができます。
# 1 "<command-line>" 2
# 1 "t.C"
# 1 "/usr/include/c++/6.2.1/iostream" 1 3
これで、私の最終的には、1行のソースファイル内の実際の#include
文が表示されます。明らかに - "config.hのC++" ヘッダファイル、内部コンパイラのヘッダ
# 36 "/usr/include/c++/6.2.1/iostream" 3
# 37 "/usr/include/c++/6.2.1/iostream" 3
# 1 "/usr/include/c++/6.2.1/x86_64-redhat-linux/bits/c++config.h" 1 3
オクラホマので、iostream
自体#include
の本:私の<iostream>
があるところです。
私が続けるならば、私は、<iostream>
は当然、で引っ張ることstdio.h
よう<ios>
、<type_traits>
、だけでなく、Cのヘッダファイルを見ることができます。
前処理段階でコンパイラを実行し、中に引っ張られてしまったすべてのヘッダファイルの素敵な、フォーマットされたリストを生成し、ヘッダファイルを取り、迅速小さなスクリプトを書くには余りにも難しいことではありません。
オープンあなたが含むヘッダファイルは?とにかくそれがなぜ重要なのでしょうか? –
標準ヘッダーには最小限の(したがって移植性のない)組み込みセットを持つ必要はありません。重複は無害です。 'cassert'は、複数回インクルードされたときに面白いことをする* only *ヘッダです。 – Hurkyl
このような暗黙的にインクルードされたヘッダーには決して依存しません。実装の詳細であり、いつでも変更できます。常に明示的に必要な機能を含める。 –