ユーザ定義関数

ユーザ定義関数に関して、
独自の関数を定義することが可能なのですが、
これもCと同じ感じで記述して行きます。
ユーザ定義関数を作るには、事前にプロトタイプ宣言をする必要があります。

#import <Foundation/Foundation.h>
void messagePrint(NSString *message);   ←  プロトタイプ宣言
int main(int argc, const char * argv[])
{
    messagePrint(@"HelloWorld");  ←  関数の呼び出し
    return 0;
}
ユーザ定義関数
↓
void messagePrint(NSString *message)
{
    NSLog(@"%@", message);
}

プロトタイプ宣言は、戻り値の型と関数名と引数で宣言します。
これを記述しないとコンパイルエラーになります。
それと、変数のスコープについても書いておきます。
関数内で、定義した変数は、関数内でしか使用できません。
関数の外部で、定義した変数を関数内で使用できるスコープもあります。
関数の外部で、定義した変数は、グローバルスコープになります。

#import 
void messagePrint();
NSString *message = @"HelloWorld";   ←  グローバル変数
int main(int argc, const char * argv[])
{
    messagePrint();
    return 0;
}
void messagePrint()
{
    NSLog(@"%@", message);
}

ちなみに、スコープは、これ以外にもあって、
Objective-Cは、関数内に入れ子に何らかの処理を記述することができます(表現が正しいか不明)。
ブロックと呼ばれます。
ブロックは、関数内に{}で囲んだ部分の処理のことを言います。
ブロックを入れ子にすることもできます。

#import 
void messagePrint(NSString *message);
int main(int argc, const char * argv[])
{
    NSString *msg = @"AAA";
    {
        NSString *msg = @"BBB";
        messagePrint(msg);
        {
            NSString *msg = @"CCC";
            messagePrint(msg);
        }
    }
    messagePrint(msg);
    return 0;
}
void messagePrint(NSString *message)
{
    NSLog(@"%@", message);

}

基本的に、ブロック内で、宣言した変数は、ブロック内でしか扱えないです。
ただし、関数内で、定義した変数(ブロックが記述さている箇所より前で宣言されているもの)
などは扱えます。
それと、ブロックを入れ子にした場合は、上位のブロック内で、宣言されている変数に関しても
扱えます。