2011-10-24 12 views
0

これは本当に簡単ですが、ナットを運転しています。Obj-C関数宣言にセミコロンが必要ですか?

Objective-Cコードで単純な関数を実装しようとしています。私がこれを書いたときに、

NSInteger Sort_Function(id id1, id id2, void *context) { 

} 

私は、宣言の最後にセミコロンが必要であると誤解しました。しかし、多くの例でこの種の構文を見てきました。私は何が間違っている可能性がありますか?重要であれば、これはiOSアプリであり、関数はif節にネストされています。前もって感謝します。

+1

周囲のコードをいくつか追加してください。ここで起こっていることを伝えるのは難しいです。 –

答えて

6

機能定義 - あなたが投稿したこのスニペットは「if節に入れ子になっていますか?残念ながら、C(および拡張子はObj-C)では違法です。すべての関数の宣言と定義は、ファイルの最上位になければなりません。 @implementationセクションの内側にもオプションである:

// Start of file 

// Declaration or definition valid here 
void my_func(void); // Declaration 
void my_other_func(void); 
void my_third_func(void); 

void my_func(void) { // Definition 
    return; 
} 

@implementation MyClass 

// Definition also valid here 
void my_other_func(void) { 
    return; 
} 

- (void) myMethod { 
    if(YES){ 
     void my_third_func(void) { // Invalid here 
      return; 
     } 
    } 
} 

@end 

は、それはあなたがblock syntaxと関数の構文を混乱させていることは可能ですか?

// The caret indicates definition of a block, sort of an anonymous function 
int (^myBlock)(int); 
myBlock = ^int (int my_int) { 
    return my_int; 
}; 
+0

これは確かにif節の結果です。それを実装ブロックに移すことは、セミコロンの問題を解決したようです。ありがとう! – Rob

+0

私は助けてくれるとうれしいです。 –

関連する問題