解決済みとしましたが、コンテストが一区切りついて、改めて考えてみています。
K-s さんへ
コンパイルということを少しでもかじっていたら、前にあげたスクリプトのような書き方は
ありえないだろうと分かって、冷や汗ものです。
みなさんに、無知のほどを笑われているようで、恥ずかしいです。
「.......... 最後に「#else」を置くのは、逆に分かりにくくなってしまいます。」
の「#else」は、「#else」の締めの「#endif」の勘違いですし、こんなスクリプトなどは、考えも
しなかったでしょう。ただ、うすうすこんな書き方はしないだろうと感じていたので、「みごと
に失敗」だった訳です。それでも、やはり「#else」から5000行を隔てて、最後に「#endif」が
あるというのは、ちょっと考えものです。コンパイル後の範囲指定(プリプロセッサ命令)であって、
一般的な命令云々以前のことだから、それはそれでいいのだ、そういうものだ、と言われれば、
それまでですが、スクリプト上、「#endif」を「#else」からそう離れていないところに記述する
ように、できないものでしょうか。
MillkeyStars さんへ
「プリプロセッサ命令時点でコンパイル停止させてメッセージを表示させる機構が欲しい」
この意味がやっと分かった気がします。
コンパイルされた後の、プログラムの実行範囲を、プリプロセッサ命令で指定をすれば、
指定をはずした部分は、スクリプトの実行は無視されるはずだが、「文法エラー」があると、
コンパイルの時点でコンパイル不可能になり、プリプロセッサ命令が意味をなさなくなって
しまう。プリプロセッサ命令で指定をはずした部分は、コンパイル自体しないようになって
いれば、その部分に「文法エラー」があろうとなかろうと、関係なくなるのに...。と、こう
いう理解の仕方でいいでしょうか。
それで、さらに改めて、ダイアログ全文を
『このスクリプトは、「HSP バージョン 3.6β1」版用です。
「HSP 3.5」でも、動作可能にしていますが、
「HSP ver.3.6β1」による実行をお勧めします。』
として、
if hspver <= 13575 {
dialog "このスクリプトは、「HSP バージョン 3.6β1」版用です。....."
}
#include "hgimg4.as"
#ifndef getangr
#define getangr(%1,%2,%3,%4) ;
#define getang(%1,%2,%3,%4) ;
#endif
; 本来「3.6β1」で実行するスクリプト
と、やってみました。「getangr」が定義されていない場合、これを無しにしたかたちにして、
「#endif」以下の、本来「3.6β1」で実行するべきスクリプトを実行するようにする。これだと、
警告メッセージをだした上で、かつ「HSP 3.5」でも、「#endif」以下を実行できるはずで、実際、
その通り成功しています。もちろん、これを「3.6β1」で実行すれば、本来通りに動きます。
頭が少し混乱しているので、本当にこれでいいのか、それとも、たまたまうまくいっている
だけなのか、分かりませんが。