ellerさん、FUJIさん、検証ありがとうございます。
こちらではまだ懲りずにコードばかり試行錯誤してました;
まさか“一行に書かれた式の数”がエラー行のずれる原因とは
思いもしませんでした;;
スレッドが長くなってきたのでここまでで判ったことを
ひとまずまとめたいと思います。
■マクロで%cを使用するとエラー行がずれる。
#define macro %c mes 1 / 0
macro //エラー行を間違うエラー
■文字列の指定で{" "}の書式を使って複数行書いた場合にエラー行がずれる。
a={"複数行文字列
複数行文字列
複数行文字列"}
x=3/0 //エラー行を間違うエラー
■コメントで/* */の書式を使って複数行書いた場合、#から始まる行があると複雑にエラー行がずれる。
/*(1行目ここまでと判断)
ここの行末はカウントされる(2行目ここまでと判断)
#(3行目ここまでと判断?)ここの行末はカウントされない
ここの行末もカウントされない
...
...
...
...
ここの行末はカウントされる(改行がコメント外にあるため)*/ //(4行目ここまでと判断)
dialog str( __LINE__ ) + "行目と判断(実際には10行目)" : end //(5行目ここまでと判断)
//ellerさんの検証より抜粋
■1行に一定以上の式が発生するとエラー行がずれるよう。
・例1
#define sample(%1) %1=1:%1=2:%1=3:%1=4:%1=5:%1=6:%1=7:%1=8:%1=9:%1=10:\
%1=11:%1=12:%1=13:%1=14:%1=15:%1=16:%1=17:%1=18:%1=19:%1=20:%1=21:%1=22:\
%1=23:%1=24:%1=25:%1=26:%1=27:%1=28:%1=29:%1=30:%1=31:%1=32:%1=33:%1=34:\
%1=35:%1=36:%1=37:%1=38:%1=39:%1=40:%1=41:%1=42
sample a
x=3/0 //エラー行を間違うエラー
・例2
a=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
x=3/0 //エラー行を間違うエラー
//FUJIさんの検証より抜粋
//ゼロ除算でエラーを起こしている行の先頭に' mes __line__: ' を入れると、この表示の方は正しい行数でした。
//'#cmpopt ppout 1'で出力したプリプロセッサ済みのファイルには問題はないので、
//問題は、デバッグ時の行数カウントの方にあると思います。
の4パターンですね。
ここまでのエラー行がずれる検証で何かお気づきの方、他のずれるパターンをご存知の方、
いらっしゃいましたら書き込みをお願いします。