2011-10-27 9 views
7

OK、これは質問"Constants in Objective C"に関連しています。グローバル定数ファイルのObjective-C typedef列挙

私はConstants.hを作成し、それに対応するConstants.mファイル:

// Constants.h 
extern int const BOOKS; 
typedef enum SSDifficultyLevel { 
    EASY = 0, 
    MEDIUM = 1, 
    HARD = 2 
} SSDifficultyLevel; 

// Constants.m 
int const BOOKS = 66; 

私の質問は:enumConstants.htypedef D」であるためにはOKですか?コードは正常にコンパイルされています(これまでの警告やエラーはありません)。しかし、これが正しい方法であるかどうか疑問に思っていました。関連する質問で提供される解決策は定数の定義と宣言の分割です。

ありがとうございました。

答えて

3

よく、定数と列挙型は異なる目的を果たします(明らかなオーバーラップがありますが)。そのルールを破るのに本当に良い理由がない限り、人々が期待するものからあまりに遠く離れすぎないようにしてください。

個人的には、これらの宣言を通常使用するものと関連付ける必要があるため、「グローバル定数ヘッダー」はあまり好きではありません。例えば、Appleのフレームワークは通常、関連するインタフェースの近くで列挙型を宣言し、通知名はクラスと同じヘッダに宣言します。

それ以外のものは正しく宣言しています。

C++またはobjC++を使用している場合は、名前が異なる可能性があり、リンクエラーが発生する可能性があるため、externを修正する必要があります。

#if defined(__cplusplus) 
#define MONExternC extern "C" 
#else 
#define MONExternC extern 
#endif 

、あなたがそうのようなBOOKSを宣言します:

MONExternC int const BOOKS; 

一つの他のノート、そしてこれはあなたの例では、説明のみを目的としていることがあります。このような

何かがトリックを行う必要がありますこれらの識別子は非常に短く、他の識別子と容易に衝突する可能性があります。

+1

こんにちはJustin:私は先に進み、これを実装します。あなたの答えとコメントをありがとう、私はあなたの助けに感謝します。 – rtovars