C標準は、ディレクティブ( - 6.10(2) - C99前処理指令)を前処理については、これを言う:
プリプロセッサディレクティブは #前処理トークンは、(始まる前処理トークンの配列からなります変換フェーズ4の開始時) ...
と(C99 - 6.10(7)):
前処理ディレクティブ内の前処理トークンは、特に指定のない限り、マクロ の拡張の対象にはなりません。それはそれがどうなるにもかかわらず、変換フェーズ4の開始時に#で始まっていないため、2番目のライン上のトークンを前処理のシーケンスは、前処理指令ではありません
#define EMPTY
EMPTY # include <file.h>
:で
例マクロのEMPTYが置き換えられた後であるため、
マクロは、 '#include
'前処理ディレクティブに展開できません。これらの指令は、翻訳フェーズ4の開始時(その指令を処理するときに前処理が行われるとき)に配置する必要があります。マクロ展開はフェーズ4の間に発生するので、マクロはフェーズの開始時に存在する何かを起こすことはできません4.
私は、次のが作業していること、しかし、指摘したいと思います:
#ifdef WIN32
#define PLATFORM_HEADER "platform/windows/platform.h"
#else
#define PLATFORM_HEADER "platform/linux/platform.h"
#include PLATFORM_HEADER
を
C標準がこれを言っているので(C99、6.10。2(4) - ソースファイルを含める):
形態
# include pp-tokens new-line
のプリプロセッサディレクティブが(つまり、前の2つの形式のいずれかと一致しない)、許可されています。ディレクティブに含まれる前処理の トークンは、通常のテキストと同様に処理されます。 (現在マクロ名として定義された各 識別子が 前処理字句のその置換リストに置き換えられます。)
ある日、Linuxのような大文字と小文字が区別されるOS(例:Foo.hとfoo.hは2つの異なるファイル)にコードを転送し、Windowsで捕捉されないすべてのスペルミスが解決されます。ねぐら。あるいは、あなたがLinuxの人なら、あなたはある日、違うが同じように恐ろしい問題を抱えて、他の方法に行きたいと思うだろう。 –
私は常にファイル名の小文字のルールに同意します。私は小文字変換の問題(クラス名 - >ファイル名)を除外したいので、このように書いています。しかし、それは言及する価値がある、ありがとう。 +1! – moala
私たちのルールは、ファイル名が、私たちの型と関数の命名規則とまったく同じであるということです。ここではQuestionerと同じように、型名FooTypeはFooType.hで定義されます。どのような「スタイル」ガイドラインと同様に、スタイルを選択してそれに固執する。私たちがLinux上で大きく発展していると言っているので、このルールはOSによって自動的に強制されます.... hmmmmm ..... –