私は、標準C++コンパイラと標準コンパイラの両方でコンパイルできるようにする必要があるユーティリティを開発中です。このコードは、存在するC++コンパイラについても投げられる可能性があります。コンパイラが移植可能かどうかを移植可能に検出する方法<iostream> vs <iostream.h>
ターゲットコンパイラが.h拡張子の有無にかかわらずヘッダーファイルをサポートしているかどうかを堅牢かつ移植可能に判断する手段を探しています。また、名前空間がサポートされているかどうかを検出する必要があります。これらのニーズの両方が可能である場合とできない場合があります。
少し背景:このユーティリティはPerlのInline :: CPP言語拡張です。拡張子は自動的に<iostream>
を含み、 '.h'が必要かどうかを推測します(もちろん、コンパイラが名前空間をサポートしているかどうかに関係なく)。その点では完璧ではありませんが、この問題はユーティリティの有用性の幅を狭めています。
質問を繰り返す:コンパイラが<iostream>
などの標準ヘッダー、または<iostream.h>
などの標準より前のヘッダーをサポートしているかどうかを移植可能に検出するにはどうすればよいですか?
おそらく、 '_MSC_VER'のようなプリプロセッサ分岐を行う必要があるでしょう。また、過去10年間のコンパイラを使用するように指示することもできます。 – GManNickG
これは、コンパイラのバージョンを検出することと、それに基づいて推測をハードコードすること以外の、コンパイル/前処理時には不可能です。 configureスクリプトの作成について考えましたか? – Dani
これは私が恐れていたことです:何十というコンパイラの指紋(_MSC_VERなど)を決定し、プリプロセッサディレクティブの迷路を設定する必要があります。 – DavidO