Function Prototypes (関数[かんすう]プロトタイプ)

関数はプロトタイプ宣言をすることができます。

関数の宣言にすぐ続けて内容を記述することもできますが、ファイルの先頭で関数名と引数[ひきすう]だけを宣言して、内容はファイルの後ろの方に書くこともできます。


コンパイラはトップダウン式に(上から下に)ソースコードをコンパイルするので、関数プロトタイプはコードを組織化するのに有用です。

コードの中からmain()関数やユーザー定義関数を簡単に見つけられるようになるため、これは一般的なプログラミングスタイルになっています。

コンパイラにとっては、main()関数中で使われるユーザー定義関数の引数や戻り値[もどりち]の型を知るために、main()関数より先にその関数のプロトタイプが必要になります。
( 参照: void main(), int StartingConditional() )

// 関数プロトタイプ
int getSomeNumber(string sName);
// ここではユーザー関数の内容は記述しない

void main()
{
     int nBlah = getSomeNumber("Chuck");
     // ここで上の関数を使用しているが、まだ内容は定義されていない(コンパイラも知らない)
     // それでもコンパイルが成功するのは、コンパイラが引数と戻り値の型チェックしか行わないため
}

// ここでユーザー関数の内容を記述する
int getSomeNumber(string sName)
{
     if (sName == "Chuck")
          return 24;
     else
          return 0;
}

伝統的なC言語と違い、NWNスクリプトでは引数の型だけを宣言した関数プロトタイプを作ることができません。

引数名は関数プロトタイプと関数の内容定義とで異なっていても構いません(もちろん同じ名前を付けることが推奨されます)

// コンパイルできない例:
void PrintValue(int);

void main()
{
     someValue(6);
}

void PrintValue(int nValue)
{
     PrintInt(nValue);
}

上記のものは仮引数の名前がないのでコンパイルできません。

以下のようにすればコンパイルできるようになります。

// コンパイルできる例:
void PrintValue(int nValue);

void main()
{
     someValue(6);
}

void PrintValue(int nValue)
{
     PrintInt(nValue);
}

BioWareの様々な関数はnwscript.nssの中でプロトタイプ宣言されています。




author: Charles Feduke, JP team: ohtsuki
Send comments on this topic.