C ディレクティブ 新しいページはコチラ
提供: yonewiki
(→#include) |
(→#include) |
||
43行: | 43行: | ||
'''<nowiki>#</nowiki>include <nowiki><</nowiki>(パス\)インクルードファイル名<nowiki>></nowiki>''' | '''<nowiki>#</nowiki>include <nowiki><</nowiki>(パス\)インクルードファイル名<nowiki>></nowiki>''' | ||
+ | |||
+ | |||
+ | " "2重引用符と<nowiki><</nowiki> <nowiki>></nowiki>山カッコ(小なり 大なり)の2とおりのファイルパス記述が#includeの命令の後ろに空白を挟んで記述することで指定できますが、それぞれはディレクトリの検索順序が異なります。" "2重引用符はプロジェクト固有のインクルードファイルを指定し、<nowiki><</nowiki> <nowiki>></nowiki>山カッコは標準関数やSDKなどの開発環境設定を優先するようなインクルードファイルを指定するために利用されます。 | ||
+ | |||
+ | |||
+ | 具体的には以下の優先順序になる。 | ||
+ | |||
+ | |||
+ | '''” ”2重引用符''' | ||
+ | :#<nowiki>#</nowiki>includeディレクティブが記述されたファイルの置かれているディレクトリ内、相対パスがある場合はファイルの置かれているディレクトリからの相対パス内。相対パスに関する扱いは以降も同じなので省略。 | ||
+ | :#<nowiki>#</nowiki>includeディレクティブによって最後に開かれたファイルが優先されて使われ、ディレクトリの検索は読み込みをしたファイルが置かれている親ディレクトリ。なければ更に読み込みをしたファイルが更に#includeディレクティブによって読み込まれていたなら、読み込みをした親ディレクトリ(親の親)と遡っていく。 | ||
+ | :#/I コンパイルオプションで指定されているディレクトリ | ||
+ | :#環境変数INCLUDEで指定されたディレクトリ | ||
+ | |||
+ | |||
+ | '''<nowiki><</nowiki> <nowiki>></nowiki>2重引用符''' | ||
+ | :#/I コンパイルオプションで指定されているディレクトリ | ||
+ | :#環境変数INCLUDEで指定されたディレクトリ | ||
+ | |||
+ | |||
+ | incluedeファイルの入れ子は10レベルまでとなっているので、あまり階層(呼び出しの呼び出しの呼び出し…のような感じ)が深くならないようにディレクティブによるヘッダの呼び出しをするように組み込みましょう。絶対パスを指定した場合はその他のディレクトリは検索しないことになっていますので、次々と検索されるのを防ぐ必要がある場合には絶対パスが利用できます。但し、絶対パスにした場合、第三者にプログラムを再利用してもらう場合の配慮が必要になりますので、用途に応じた対応が必要になります。あえて絶対パスにして、自分以外のPCでは簡単にコンパイルされないようにする嫌がらせも可能です。原因がわからない人には使えないという試練を与えるドラマでいうところのなんだその変な胡散臭い試練はって奴になります。 | ||
+ | |||
+ | |||
+ | マイクロソフト固有の処理としては、環境変数や/I オプションには;区切りで複数のパスを指定できるが、先頭に記述されているパスが優先されるというものです。 | ||
+ | |||
+ | |||
+ | インクルードファイル名が重複する場合には、このあたりの優先度を理解してインクルードパスの指定をきっちりとしてやることが大事になってきます。 |