3

私はこれをやっています

if ([resourceCompletionReward objectAtIndex:experienceD] != 0) {

しかし、Xcode は私にエラーを与えています:

期待される表現

私は次のように定義experienceDしました

#define experienceD 0;

私は何を間違っていますか?

4

2 に答える 2

7

セミコロンがあってはいけません。

#define experienceD 0

うまくコンパイルされます。

また、このように UPPER_CASE_NOTATION を使用して定数に名前を付けることをお勧めします。

完全を期すために、Appleが提案することを追加します(Cocoaのコーディングガイドラインから)

通常、#define プリプロセッサ コマンドを使用して定数を作成しないでください。整数定数の場合は列挙型を使用し、浮動小数点定数の場合は const 修飾子を使用します

そしてまた

定数が他の定数と無関係な場合は、const を使用して整数定数を作成できます。それ以外の場合は、列挙を使用します

したがって、特定のケースでは、定数を次のように定義することをお勧めします

static const int ExperienceD = 0;
于 2013-04-07T20:49:49.490 に答える
1

#define定数の定義には使用しないでください。それ#defineはテキストの置換だけなので、あなたの場合、コンパイラは

if ([resourceCompletionReward objectAtIndex:0;] != 0) {

;そして、あるべきではない場所について不平を言います。

定数を計算したい場合、これは特に面倒です。

#define CONSTANT 1 + 2
int y = 2 * CONSTANT;

コンパイラは単純なテキスト置換を行うので、

int y = 2 * 1 + 2;

これは実際には期待値ではありません。これを回避するには、各 #defined 定数を括弧で囲むことを忘れないでください。

定数を定義するより良い方法は、const変数を使用することです。

static const int experienceD = 0;

連続した整数値で多くの定数を定義する場合は、列挙型も使用できます。

enum {
    experienceD = 0;
};
于 2013-04-07T21:11:00.810 に答える