動機
新人の頃、C言語でコメントがエラーの原因となったことがありました。
珍しい体験だと思うので、思い出しながら記事にしました。
環境
あまり覚えてません。。。
- c言語(バージョン不明)
- gcc系のコンパイラ(バージョン不明)
→おそらく、shift-jisに対応してないことが原因です。
結論
コメントの最後の文字について、
バイナリコードとして見た場合、
「¥」と同じなら、コメントの次の行もコメントになってしまいます。
下記の例だと、
「能」のバイナリコード末尾部分が「¥」と同じバイナリコードになり、「能」の次の行もコメントとして解釈されてしまいます。
そのため、出力される結果は0となります。
test.c
// 初期化
a=0;
b=0;
// aは100未満の値を入れることが可能
a=a+99; //この行もコメントとして解釈される
print(a+b); //ここでは0が出力される
対策
- 問題となる文字を避ける
→「能」バイナリコードの末尾が「¥」と同じになる文字に注意する - 「/**/」でコメントする
→「/* ほげほげすることが可能 */」とすると、末尾が「*/」になり本エラーを避けることができます。
追記
↓コメントからのご意見を反映します。
- 文字コードをUTF8なとに変更する。
- コンパイルオプションで文字コードを指定する。
→ただし、include先の文字コードもオプションと同じ文字コードで解釈されるため、注意が必要。
最後に
数年前に出くわした現象であり、
同じような環境でも発生しない可能性があります。
同じ状況で困っている人の助けになると嬉しいです。
文章が読みにくいなど指摘事項がありましたら、遠慮なくコメントしてください🙇♀️