前回のブログをアップした後、Ver.11.5で動くようになったインクルード・ファイルを2015のほうにコピーして試したところ、またコンパイル・エラーが起きてしまいました。


 やはり原因はコメント文らしいのです。'図形'が怪しいのでそのコメント文を (* と *) で囲ってやるとエラーが消えます。

 要するにシフトJISコードの2バイト目が '}' の文字コードと同じになっているためにコメント文が途中で切れてしまい、コメントの後半が間違ったソースコードと解釈されてエラーになるのでしょう。'{' と同じ文字コードだった場合は、たぶん大丈夫です。

 (* と *) の場合は、問題になりそうなのは2バイト目が '(' と同じ文字コードの文字の次に '*' がある場合ですが、これは気を付けて回避するしかないでしょう。


 問題を起こす2バイト文字をスクリプトでリストアップすることは可能ですが、とりあえず怪しいコメント文は { と } でなく (* と *) にするということで良さそうです。



 コメント文についての覚書き:


(1) 2バイト文字を含むコメント文は { と } よりも (* と *) のほうが安全。

(2) コメント識別文字の前後に2バイト文字は書かないほうが安全。

(3) コメントには2バイト文字を使わないのが一番安全。



 今回の教訓は、スクリプトエディタがシフトJISに対応してるからといって、コンパイラがシフトJISを考慮してると思い込んではいけないということでした。コンパイルの速度を稼ぐなら1バイト文字と2バイト文字の区別なんかしないほうが楽ですから。(追記:これはVer.11.5の話です。2015のコンパイラはユニコードには対応しているはずです。)




 ここからはコメントとは関係ありません。

 インクルード・ファイルのソースコードで2バイト文字を使ってる場合、テキスト・エンコーディングがシフトJISでなかったら文字化けするのですが、それが表に出てこない(例えば条件式の判定に使う)文字だと文字化けしていることが分かりません。今後2バイト文字を使うときには気を付けたいと思います。




 ※追記

 シフトJISのコードを調べたら、 ( , ) , * の文字コードは2バイト文字には使われていませんでした。だから (* と *) で囲ったコメント文は2バイト文字でも安全です。

 UTF-8がvw2015では大丈夫なのにVer.11.5ではダメだったり、シフトJISがVer.11.5では大丈夫なのにvw2015ではダメだったりするのは、たぶんその間にコンパイラがユニコードに対応したのでしょう。しかしシフトJISの1バイト文字か2バイト文字かのチェックはしてないようです。