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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0628
かけたおちゃわん#constと#defineはどう違うのか?4解決


かけたおちゃわん

リンク

2019/6/28(Fri) 00:20:44|NO.87759

タイトル通り、#constと#defineの違いがわかりません。


#const a 1


#define a 1

上記の2つはどう違うのでしょうか。
わざわざ命令として別れているわけで、何かしら意味があるものだと思うのですが、
特にこれといった違いがなければ(自分ルールとして)#defineで統一しようと考えています。



この記事に返信する


沢渡

リンク

2019/6/28(Fri) 03:02:52|NO.87760

以下を実行すれば#constと#defineの違いがわかると思います。

#const a1 1+2 #const b1 a1*4 mes b1 //結果は12。b1はa1(=3)に4を掛けた結果になるので。 #define a2 1+2 #define b2 a2*4 mes b2 //結果は9。b2は単純に「1+2*4」と置き換えられるので。
式を指定するのではなく単独の数値を指定するのであれば
#constも#defineも変わりませんが、
#constを使えば後からソースコードを読み返して
「これは定数の意味で使ってるんだ」ということがわかりやすいという長所があります。
あくまでも個人の流儀の問題なので、ご自由にとしか言いようがありませんが。
(上の例でも #define a2 (1+2) とカッコでくくれば同じ結果になりますので)



X

リンク

2019/6/28(Fri) 09:03:29|NO.87761


#cmpopt ppout 1
として 標準エディタなどで F5 としていただくと「hsptmp.i」というファイルが出来上がります。
メモ帳なりテキストエディタで開くことのできるファイルです。
これを見ていただくとわかるのですが #define はあくまで置換するのみ。#const は計算済みのものが入ります。
つまり

#define a 2 * 3


#const a 2 * 3
だと
#const a とした箇所には直接6が入りますが #define a とした箇所にはあくまで 2 * 3 が入るのみ、となります。
直接演算結果が入ることを選ぶか自分の把握しやすいコードを選ぶかということになり、沢渡様の言う個人の流儀の範疇となります。
HSPは基本的に実行速度の遅い部類と言われます。
そのため#defineはあくまで置換として使い、前もって演算が必要であれば#constで初めから計算しておくと少しでも…
というのはもう一昔二昔近く前でしょうか。
今だとそう大して変わらないかと思います。



かけたおちゃわん

リンク

2019/6/28(Fri) 10:14:49|NO.87763

ありがとうございます。
・#const、#defineの時点で計算されるか否かが違う(#constは計算する)
・単独の数値を指定する上では(見た目以外に)#constと#defineで違いはない
ということで理解しました。
解決済みとします。



小泉優也

リンク

2019/6/28(Fri) 20:02:11|NO.87770

解決済みですが説明をさせていただきます。
#constは「定数」を定義しています。
これは「値を変えられない変数」で、以下のプログラムはどちらのダイアログも同じ結果になります。

#const a 6*5 b=6*5 dialog a dialog b
いっぽう#defineは、「マクロ」を定義しています。
これは「プログラム上の文字列を別の文字列に割り当てたもの」です。
こうすると分かりやすいと思います。

#define a mes "abc" a



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