meryngii.neta

今日も新たな"ネタ"を求めて。

エスケープと一行コメント

// 使用可能
int x;

場合によってxは使用できないかもしれない。
Shift-JISにおいて「能」は2バイト目が\(0x5C)なので「だめ文字」と呼ばれる。これらの文字は配慮の足りないプログラムからエスケープと見なされて文字化けなどの問題を起こす。
また一行コメントは行の終わりが\だと次の行もコメントになる。#defineでダラダラとマクロを書くときと同じだ。物理行から論理行に変換される過程で一行にまとめられるらしい。
http://cppemb.blog17.fc2.com/blog-entry-35.html
結果、Shift-JISで保存すると前述のxはコメントになってしまう。
この問題はGCC*1を使っている時に気づいた。ちなみにVC++ではこの問題は発生しなかった。いわゆるバッドノウハウなのだと思う。その場しのぎの対策としては後ろにスペースを入れるだけだが、いつか困ったバグになるかもしれない。

*1:--input-charsetで解決できるらしい。