TNKさんへ
HSPは昔のN88-BASICを真似て進化してきてます。
だから gosub とラベル名でサブルーチンを記述する方法が基本ですが、
HSP3.0からユーザ定義命令、ユーザ定義関数が記述可能になりました。
この命令と関数の違いは「戻り値」を条件式や数式で使えるかどうかの違いです。
つまり、gosub とラベル名に引数を付けたタイプが「命令」で、
命令に戻り値で呼び出し元にデータを返せるのが「関数」です。
さらに関数にすると必ず変数への代入か、条件式、mes 命令などで受け取る必要があり、
C/C++言語のように関数の戻り値を読み捨てることはできません。→エラーとなる。
よって、関数と定義したら必ず戻り値を受け取りましょう。
また、命令は戻り値を返せませんので「return」命令で値(整数値・実数値・文字列)を返すと
整数値は「stat」
実数値は「refdval」
文字列は「refstr」
というシステム変数で参照可能です。
これは既に「窓月らら」さんがアドバイスしてる通りですね。
あと関数は必ずカッコを付ける必要があるが、
命令はカッコを付けてはいけないし、
配列は基本的に返せません。→JavaScriptとは違う。
#deffunc Sample int _p1,int _p2,\
local a,\
local b,\
local c
return
このように記述すると「Sample」命令でしか使えない「a」「b」「c」変数を宣言したことになります。
つまり、C/C++でいう局所変数(ローカル変数)ですね。
しかし、この場合は広域変数(グローバル変数)で既に「a」「b」「c」変数が使われてるとエラーとなります。
マニュアルには上記のように「\」記号で複数行に渡り記述できるとは書いてないが、
プリプロセッサの項目で「\」記号で複数行を表現できると書かれています。
だからユーザ定義命令、ユーザ定義関数で「local」指定は仮引数よりも
後で記述するのが望ましいようなことが書いてありますね。
この意味は上記のことを指してると思います。→たぶん。