HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0813
MZK配列の表記方について6解決


MZK

リンク

2020/8/13(Thu) 22:05:51|NO.91160

関数や命令の引数として一次元の配列変数を渡す場合に、
以下のように数値や変数を並べて配列のように渡す表記方はありますか?

配列変数を引数とする命令hoge
a=1,2,3
hoge a
…とすべきところ、

hoge [1,2,3]
のように数値を直接入力したり、

a=1
b=2
c=3
hoge [a,b,c]
のように変数を並べて配列のように渡すことが可能でしょうか。



この記事に返信する


GENKI

リンク

2020/8/14(Fri) 15:56:17|NO.91163

残念ながらHSP3ではそういった使用方法はできません。事前に配列変数を作ってから渡してやる必要があります。
関数/命令の引数として配列変数を渡す場合は、配列変数の先頭アドレスを1つだけ渡しているだけのようです。


要望に近い方法としては、このような方法もあります。

; 配列の一部を別の配列変数にコピーする例 a=1,2,3,4,5 dim b, 3 memcpy b, a, 3*4 ; aの内容がbにコピーされていることの確認 repeat 3 mes b(cnt) loop ;使用例 hoge b


配列変数の記述方法は詳しくは、「プログラミング・マニュアル 3.9.配列変数」を参照ください。
使用可能な記述の仕方の例
a(2)
a(i)
a.2
a.i
a ←a(0)と同じ



MZK

リンク

2020/8/15(Sat) 00:28:09|NO.91167

GENKIさん

ありがとうございます。
ポインタを渡しているのであらかじめ配列変数を作らなければいけないということですね。

memcpyについてもありがとうございます。



あらや

リンク

2020/8/15(Sat) 18:57:39|NO.91175

すでに解決済みなので参考になるかわかりませんが
単純にオーバーロードみたいな手法をやりたいという事ならば、
#defineマクロを使えば一応可能です。

『HSP 可変長引数』とか、『HSP オーバーロード』などで検索してみると
かなり少ない例ですが出てきます。



MZK

リンク

2020/8/17(Mon) 13:25:59|NO.91189

あらやさん

ありがとうございます。
#defineについて調べてみましたが、
引数をマクロで加工して関数に渡すようなイメージまでで
実際の構文についてあまりよく分かりません。

もし宜しければ上記配列変数を関数に渡す場合について、
サンプルをお示し頂けますでしょうか?
お手数お掛けしますがご検討お願いします。



あらや

リンク

2020/8/18(Tue) 05:39:15|NO.91191

あくまでも簡単な例ですが
シンプルに合計値を返すだけの命令です。

// 偽オーバーロード #module OL // 引数の初期値を文字列にして、2つ目の引数が文字列か数値かで判別する #define global func(%1="dummy", %2="dummy", %3="dummy") v1@OL=%1: v2@OL=%2: v3@OL=%3: if(vartype(v2@OL)==2){func1@OL %1}else{func2@OL v1@OL, v2@OL, v3@OL} // 配列で渡す場合 #deffunc local func1 array p1 return p1(0) + p1(1) + p1(2); // 変数もしくは数値を個別に渡す場合 #deffunc local func2 int p1, int p2, int p3 return p1 + p2 + p3; #global // 配列の場合 p = 1, 2, 3; func p; mes stat; // 1+2+3なので、6が表示されれば正常 // 変数を個別に渡す場合 p1 = 2; p2 = 3; p3 = 4; func p1, p2, p3; mes stat; // 2+3+4なので、9が表示されれば正常 // 数値を渡す場合 func 3, 4, 5; mes stat; // 3+4+5なので、12が表示されれば正常

vartypeやvarsizeを使用すれば変数の型やサイズがわかるので
配列変数かどうかなどは判別できるのですが、
変数か数値なのかを判別することが出来ないので
一旦適当な変数に代入してから判別しています。



MZK

リンク

2020/8/20(Thu) 08:32:21|NO.91206

あらやさん

ありがとうございます。
大変参考になります。
試してみます。



ONION software Copyright 1997-2023(c) All rights reserved.