コンパイラの検索規則と現在の場所

デフォルトでは、コンパイラは、バークレー版 UNIX の検索規則を使用するため、ソースファイルと #include ヘッダファイルは、現在の場所からの相対位置で検索されます。現在の場所とは、その時点でコンパイラによって処理されているソースファイルまたはヘッダファイルが含まれているディレクトリです。

検索パスの要素からの相対位置でファイルが検出されると、そのファイルを含むディレクトリが新しい現在の場所となります。コンパイラがそのファイルの処理を終了すると、以前の現在場所に戻ります。常に、ネストされた #include ディレクティブのスタックに対応する、現在の場所のスタックがあります。例えば、現在の場所がインクルードディレクトリ ...\include である場合、コンパイラがインクルードファイル sys\defs.h を検索する際、このディレクトリを検索し、ファイルが存在している場合は、...\include\sys\defs.h を検出します。コンパイラが defs.h の処理を開始すると、現在の場所は ...\include\sys になります。defs.h によってインクルードされるファイルで、絶対パス名が指定されていないファイルについては、...\include\sys からの相対位置で検索されます。

元の現在の場所である ...\include は、コンパイラで defs.h の処理が終了したときにのみ復元されます。

コンパイラオプション --kandr_include を使用すると、現在の場所のスタッキングを無効にできます。このオプションにより、コンパイラでは、カーニハンとリッチーの検索規則が使用されます。この規則に基づき、ルートから始まらないユーザ #include は、コンパイル中のソースファイルを含むディレクトリの相対位置から検索されます。

Show/hide関連項目

概念
リファレンス
その他の情報
  • Kernighan, B.W. and Ritchie, D.M.『The C Programming Language』(2nd edition、1988)Prentice-Hall, Englewood Cliffs, NJ, USA. ISBN 0-13-110362-8

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811