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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0130
flexconstに関数は使えない?3解決


flex

リンク

2010/1/30(Sat) 13:56:03|NO.30245

#constに関数を入れたところエラーが出ました。
#defineだと関数が入っていても使えるようですが、
こういう仕様、ということでしょうか。



#module #defcfunc half int a return a/2 #global ;#const TMP half(2) ;エラー出る ;#define TMP half(2) ;使える mes half(2) mes TMP stop



この記事に返信する


晩御飯

リンク

2010/1/30(Sat) 15:24:42|NO.30247

#defineは単純な字の置換えで、#constは計算式の置き換え。
#constが呼ばれる時点ではまだhalf()の挙動(存在かもしれない)が
コンパイラには分からないので計算ができずにエラーになる。
だった気がする。



u

リンク

2010/1/30(Sat) 15:34:28|NO.30248

#const命令は数値(数式)用のものだからだと思います。

#define命令は、そのスクリプトの場合TMPの書かれた部分がhalf(2)の戻り値に置き換えられるのではなく、
TMPの書かれた部分がhalf(2)に置き換えられます。
ですから同じように#constに書けばエラーが起こるのも頷けます。

置き換えについては以下の2行を実行すればどういうことか分かって貰えると思います。

#define msg mes "aaa" msg



flex

リンク

2010/1/30(Sat) 20:07:57|NO.30261

なるほど、#defineはその場で変換していないから柔軟に使えてたんですね。
ありがとうございました。



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