3

現在、Windows、Linux、iOSで実行されているマルチプラットフォームプロジェクトがありますが、Objective-Cで望ましくない問題が発生しました。

残念ながら、exp私のタイプの1つに名前を選択しました(式、コード内の出現回数を考えるとかなり合理的です)が、Objective-Cにはmath.hデフォルトでヘッダーが含まれているため、名前の衝突が発生します。

.pch(すべてのソースファイルの前にデフォルトで含まれているプレフィックスファイル)のすべてをコメントアウトしようとしましたが、expそれでも再定義のフラグが付けられています。

Objective-Cプロジェクト内のソースファイルにmath.hを含めない方法を知っている人はいますか?

4

1 に答える 1

5

Objective-Cには正式な仕様はありませんが、Cから機能を継承します。Cでは、プログラムに標準ヘッダーが含まれていない場合でも、プログラムは標準ヘッダーの識別子を使用しないでください。したがって、独自の識別子に「exp」を使用しないでください。

「exp」の使用を主張する場合は、プリプロセッサステートメントで問題を回避できる可能性があります。

#define exp MyExp

これにより、あたかもそれが識別子の1つであるかのように、ソースコードに「exp」を書き込むことができます。プリプロセッサはそれを「MyExp」に変更するため、コンパイラは「MyExp」を識別子として認識し、文句を言いません。

これにより、オブジェクトコード情報やデバッグツールで識別子が「MyExp」として表示されたり、将来math.hのexpを使用できなくなったりするなど、多くの問題が発生します。

于 2012-08-09T11:11:20.700 に答える