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

デフォルトでは、コンパイラは、バークレー版 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 は、コンパイル中のソースファイルを含むディレクトリの相対位置から検索されます。
関連する概念
2.12 ARMCC5INC 環境変数
2.9 コンパイラによるヘッダファイルの検索に影響を与える要因
関連する参考文書
2.10 コンパイラコマンドラインオプションと検索パス
8.99 -Idir[,dir,...]
8.111 -Jdir[,dir,...]
8.112 --kandr_include
8.179 --sys_include
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.