2008年2月20日 (水)にほんごのコメント
おはようございます 本日の当番、T.Yです。
コンシューマのゲーム開発で、最初に驚いたことを書こうと思います。。
学生だったころには、主にはVisualC++でWindowsアプリを作って勉強して、
自分の中では、このコンパイラが標準化してました。
コンシューマなどでは、コンパイラは当然別の物をつかいます。
そして、中には日本語に完全に対応できていないものなどがあります。
元々、プログラムのコードで日本語は文字列以外では使うことは無いので、問題ないですが、「コメント」は別で、当然のごとく日本語でコメントを書きます。
ただ、そこで要注意なのが、日本語の文字コードは2バイトで表されます。
問題があるのはその2バイト目が'¥'(5c)になる文字です。
問題のあるものを一部挙げますと、
'ソ''欺''圭''構''蚕''十''申''貼''能''表''暴''予''禄'
こんなやつ等で、
どういうことになるかと言いますと、
構造体のメンバでのパターン
struct test
{
int iMotionList[10]; //モーション対応表
int iLists; //表内の数
};
↓使う場所では。。。
test t;
t.iMotionList[0] = 10;
t.iLists = 1;
みたいに普通に使ってコンパイルをすると・・・・
iListsなんてメンバーはネェよ!! とコンパイラがお怒りになられます。
思わず、「えぇ~~? 定義してるよぉ。。 どうして?」となってしまいます。
どうなってしまったかと言うと・・・
struct test
{
int iMotionList[10]; //モーション対応,0x95,'\\)'n' int iLists; //表内の数
};
表の部分の2バイト目の文字の'\'と改行コードの'\'が2つ並んで'\\'となって、改行コードが無くなって、下の1行が後ろにくっついて、1行コードがなくなってしまったのです。
これも十分タチが悪いですが、エラーという形でコンパイル段階で発見できるので、まだ優しいほうです。
エスカレートして、この手のパターンでタチが悪いパターン
//発射可能
if( IsShoot() )
{
...
}
↓
//発射可,(0x94),'\\'nif( IsShoot() )
{
...
}
これだと、条件が無くなってしまって、完全に別のコードになり、
コンパイラも特に文句も言わずにコンパイルが終わってしまいます。
そしてタチの悪いバグがここに誕生します。
最初、事情を知らずに、この問題に遭遇したときには、
まったく意味がわからずに、かなり悩みました。。
しかも、原因は、一番無関係と思いがちな、コメント。
今では、フィーリングで、「多分これじゃね?」といった具合に、慣れてきましたが、
そもそも、そんな問題が起きないコードを書くのが一番。
なんて思いながら、コメントをみんな英単語で書き始めたりしようとした時もありました。
あまりに英語力の無い自分の書いたコメント。
当然のように、可読性が低下します。
そして、この挫折感。
結局、なんだかんだで普通に日本語でコメントを書いてる自分がいたり。。。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。








コメント