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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0430
neko文法について9解決


neko

リンク

2013/4/30(Tue) 18:08:51|NO.53719

a -1 という記述がエラーにならないのはなぜか教えてください
a 1 は普通にエラーになります
バージョンは 3.31 です



この記事に返信する


skyblue

リンク

2013/4/30(Tue) 18:17:30|NO.53720

>a -1
a引く1 もしくは a足す -1のどちらかなのにたいして
>a 1
こちらは式になっていないため構文エラーになっているはず。



test

リンク

2013/4/30(Tue) 18:28:45|NO.53721

ちなみにHSPにおいてはなぜか、
a-1
a-=1
と同じ意味になります。同様に
a+1
a+=1
と同じ意味になります。
他に
a-
a--
と同じ、
a+
a++
と同じです。 これらはHSP特有のよくわからない文法です。



neko

リンク

2013/4/30(Tue) 19:34:32|NO.53724

なるほど代入式になってるんですね
ちなみにこれ、自作の set_char_space という文字間隔を指定する命令で
誤って set_charspace -2 と書いたのがエラーにならなかったことで発覚したのですが
大問題じゃないですか?
同時に #cmpopt varinit 1 も指定していたのですが、こちらはこちらで
代入先の変数名を誤ると検出対象にならないし(代入ですからね)

ともかく理由が分かって助かりました。
お二人ともありがとうございました。



YSR

リンク

2013/5/1(Wed) 00:09:42|NO.53731

>NO.53721
ベンチしてみたところ、計算速度はa++の方がa+より微妙に速い模様

と言うかCやC++じゃ「++i」といった前置インクリメントの方が普通に速かったりする現実……



test

リンク

2013/5/1(Wed) 09:55:56|NO.53733

手元の環境(HSP3.32)で試したところ、
a++:906ms
a+:905ms a+1:1172ms a+=1:1173ms
となりました。a++とa+, a+1とa+=1に関連性が見られる気がします。
#include "d3m.hsp"

#const COUNT 10000000

start=d3timer()
a=0
repeat COUNT
a++
loop
en=d3timer()
mes "a++:"+(en-start)+"ms"

start=d3timer()
a=0
repeat COUNT
a+
loop
en=d3timer()
mes "a+:"+(en-start)+"ms"


start=d3timer()
a=0
repeat COUNT
a+1
loop
en=d3timer()
mes "a+1:"+(en-start)+"ms"

start=d3timer()
a=0
repeat COUNT
a+=1
loop
en=d3timer()
mes "a+=1:"+(en-start)+"ms"




KA

リンク

2013/5/1(Wed) 12:18:16|NO.53735

>>エラーにならなかったことで発覚したのですが大問題じゃないですか

中途半端に仕様外の書式を容認しているので、柔軟性と言うよりも曖昧
さが増しています。取りあえず作る側で注意するしかないでしょう。



ZAP

リンク

2013/5/1(Wed) 19:34:19|NO.53755

少なくとも
a+1
は制作者側が想定していないけど通っちゃうケースだと思われるので、
今後のバージョンアップによる仕様変更とかを考えると使わないのが無難でしょう。

チェックを厳密にしていないのは速度を稼ぐためなのかな。



hiro

リンク

2013/5/1(Wed) 23:29:27|NO.53756

仕様範囲内かと思います。

doclib\history.txt
2009/07/13 3.2b4
「=」を省略した複合代入「v+(1)」の書式を許容するように修正(fujidig)

doclib\hspprog.htm
3.8. 変数
「変数」に「+」または「-」を付加することで+1と-1を実行します。
(また、「=」を省略して 「変数」+「演算子」+「パラメーター」の形式でも 同様の動作になります。
ただし、この書式はC言語やJavaなどとの互換性がないため推奨はされません。)



ZAP

リンク

2013/5/1(Wed) 23:42:53|NO.53758

>hiroさん

推奨はしないけど仕様としては作者の想定内だったのですね。
勉強になりました。

しかし速度的にも++や--にくらべて劇的に早くなるわけでもなく、
仕様ならなぜあえて残してあるのかが逆に不思議です。



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