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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0524
理沙#if について4解決


理沙

リンク

2006/5/24(Wed) 21:47:21|NO.859

変数によって、コンパイルのON/OFFをしたいのですが、
そういうことはできるのでしょうか?


#module #if 1 #deffunc smp1 mes "これはsmp1です" return #endif #global

これを、例えば
a=0のとき、コンパイルし、
a=1のとき、コンパイルしない
ようにしたいです。

しかし、#if a とすればエラーになってしまいます。
メインの方に#const global a 1とかけばできるのですが、
const自体が変数を使えないので、どうしようもありませんっ(涙)

もしかして、無理なのですかっ??
(できなくても、全部コンパイルして使わなければいいのですが、
そうしないと、必要ない部分が多すぎて・・・。
読み込むデータなどによって、メインソースを変えずに作りたいです)
よろしくお願いします!



この記事に返信する


Irisawa

リンク

2006/5/24(Wed) 21:58:59|NO.860

プリプロセッサ命令はプリプロセス文でプリプロセッサが処理するプリプロセスなので
変数, 関数, 式などは使用できません。
定数値のみ使用できます。

プリプロセスとはコンパイルの前に行う前処理(=preprocess)のことです。
変数や関数,式などの評価はコンパイル時にコンパイラが行うのでプリプロセッサが
動作している時点では解釈されません。



kz3

リンク

2006/5/24(Wed) 23:01:05|NO.861

式は使えたはずですが、3.1b3からおかしくなってるようです。( 3.1b2では使える )

#ifのヘルプには

#define VER 5 #if VER<3 mes "ABC" ; この部分は無視されます a=111 ; この部分は無視されます mes "DEF" ; この部分は無視されます #endif
というサンプルが載っていますが3.1b3では無視されません。( 3.1b3以前なら正しく無視される )
最適化が弊害になっているかと思って最初に「#cmpopt optcode 0」として最適化を無効にしても、
変わりませんでした。

バグトラック行き?



Irisawa

リンク

2006/5/25(Thu) 02:20:15|NO.862

あ、そういえば#ifは特殊なんですよね。(^_^;



理沙

リンク

2006/5/25(Thu) 08:37:45|NO.864

> プリプロセッサが動作している時点では解釈されません
なるほどぉ、そういうことだったんですかぁ。
じゃあ、どうやっても変数は使えないわけですねっ・・・ちょっと残念です。

でも、できないってことが分かって良かったです。
何回も書き直してやっていたので。

Irisawa様、kz3様、
分かりやすいご説明、どうもありがとうございます(^^/



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