[記]2010-8-23(月), [PC]だめ文字, [vim]だめ文字をハイライト
[記]2010-8-23(月)
[PC]だめ文字
Shift_JISの『だめ文字』に引っかかってしまいました。
C言語では、バックスラッシュ(0x5C)はエスケープ文字として扱われ、行末にバックスラッシュがあると、次の行が連続した行だとみなされます。
Shift_JISは、1文字が2バイトで表されるのですが、2バイト目が0x5Cになっている文字がいくつかあります。Shift_JISを認識しないプログラムが、これのせいで誤動作することがあります。
やってしまったのは、コメントの最後に『だめ文字』を書いてしまう、ありがちなミスです。
// 最近のC言語は//コメントを使用可能
こんな感じで、//コメントの行末に、「能」という『だめ文字』を書いてしまったわけです。
そのため、次の行もコメント扱いになってしまい、謎のエラーが出てしまいました。
済んだことはしょうがないので、同じミスをしないように予防します。
要するに、行末に『だめ文字』があってはいけないわけですから、話は簡単です。
次は気を付ける。
いやいや、そんなのは、予防策になりません。全ての『だめ文字』に対して、常に注意を払うことなんて、できないです。
とりあえず、//コメントをやめる、という方法はあります。
/* 最近のC言語は//コメントを使用可能 */
でも、すでに書いたコメントを変更しまくるのも面倒ですし、
/* 最近のC言語は//コメントを使用可能*/
というふうに、「能」の直後にコメント閉じを書いてしまうと、これもエスケープされてエラーになってしまいます。
などという対策もありますが、過去コードの流用なんてのもあったりすると、そうもいかないわけで。
[vim]だめ文字をハイライト
私が常用しているテキストエディター『gvim』の設定を変えて、行末の『だめ文字』を目立つようにしました。
私さえミスしなければ、他の人がどうなろうと知らんです。
下記を.vimrc
に書けばよいと思います。
"--------------------------------------------------------------------------- " Check Dame moji "--------------------------------------------------------------------------- if version >= 700 if has("syntax") syntax on function! ActivateDameSJIS() syntax match DameSJIS /[―ソЫⅨ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭偆砡纊犾]$/ display containedin=ALL highlight DameSJIS ctermbg=yellow ctermfg=red guibg=yellow guifg=red endf augroup dame_sjis autocmd! dame_sjis autocmd BufNew,BufRead * call ActivateDameSJIS() augroup END endif endif
fileencodingがsjis
とかcp932
のときだけチェックすればいいのですが、面倒なので常にハイライト表示するようにしてます。
私がUTF-8で記述したコードを、誰かがShift_JISに変換して使うかも知れませんからね。
[記]2010-8-23(月)
[PC]だめ文字
Shift_JISの『だめもじ』にひっかかってしまいました。
Cげんごでは、バックスラッシュ(0x5C)はエスケープもじとしてあつかわれ、ゆくすえにバックスラッシュがあると、つぎのぎょうがれんぞくしたぎょうだとみなされます。
Shift_JISは、1文字が2バイトでひょうされるのですが、2バイトめが0x5Cになっているもじがいくつかあります。Shift_JISをにんしきしないプログラムが、これのせいでごどうさすることがあります。
やってしまったのは、コメントのさいごに『だめもじ』をかいてしまう、ありがちなミスです。
// 最近のC言語は//コメントを使用可能
こんなかんじで、//コメントのゆくすえに、「のう」という『だめもじ』をかいてしまったわけです。
そのため、つぎのぎょうもコメントあつかいになってしまい、なぞのエラーがでてしまいました。
すんだことはしょうがないので、おなじミスをしないようによぼうします。
ようするに、ゆくすえに『だめもじ』があってはいけないわけですから、はなしはかんたんです。
つぎはきをつける。
いやいや、そんなのは、よぼうさくになりません。すべての『だめもじ』にたいして、つねにちゅういをはらうことなんて、できないです。
とりあえず、//コメントをやめる、というかたほうはあります。
/* 最近のC言語は//コメントを使用可能 */
でも、すでにかいたコメントをへんこうしまくるのもめんどうですし、
/* 最近のC言語は//コメントを使用可能*/
というふうに、「のう」のちょくごにコメントとじをかいてしまうと、これもエスケープされてエラーになってしまいます。
などというたいさくもありますが、かこコードのりゅうようなんてのもあったりすると、そうもいかないわけで。
[vim]だめ文字をハイライト
わたしがじょうようしているテキストエディター『gvim』のせっていをかえて、ゆくすえの『だめもじ』をめだつようにしました。
わたくしさえミスしなければ、ほかのひとがどうなろうとしらんです。
かきを.vimrc
にかけばよいとおもいます。
"--------------------------------------------------------------------------- " Check Dame moji "--------------------------------------------------------------------------- if version >= 700 if has("syntax") syntax on function! ActivateDameSJIS() syntax match DameSJIS /[―ソЫⅨ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭偆砡纊犾]$/ display containedin=ALL highlight DameSJIS ctermbg=yellow ctermfg=red guibg=yellow guifg=red endf augroup dame_sjis autocmd! dame_sjis autocmd BufNew,BufRead * call ActivateDameSJIS() augroup END endif endif
fileencodingがsjis
とかcp932
のときだけチェックすればいいのですが、めんどうなのでつねにハイライトひょうじするようにしてます。
わたしがUTF-8できじゅつしたコードを、だれかがShift_JISにへんかんしてつかうかもしれませんからね。
コメント 0