C++ で行末が「機能」で終わるコメントを書くとコンパイルがおかしくなることがあるらしい

たとえば


// aとbの和を求める機能
int sum(int a, int b)
{
return a + b;
}


みたいなコードを書くと、問題が出ることがある、ということを最近しりました。


というのも、

C 言語の「//」コメントは、バックスラッシュで継続行になる!

あまり有名で無い仕様ではないかと思うのですが、C++では//コメント行末がバックスラッシュなら、次の行もコメントとして扱うことになっているようなのですが、それと文字コードの組み合わせが問題になることがあります。

VC++ではいまだに標準のエンコードがsjisなのですが、

Shift_JISにおける危険な文字まとめ

これを見るとsjisで「能」という文字の後半バイトがバックスラッシュになっています。

ということで、VC++で普通にソースファイルを作成して普通にコンパイルできるコードを、Unicodeが標準のコンパイラ、たとえばgcc等に入れるとおかしい結果になってしまいます。

VC++では標準ではsjisですが、一応BOM付きであればUTF-8に対応しているようなので、エンコードをBOM付きUTF-8に変換してやればgccでもVCでも上記のような日本語コメントがあっても問題なくコンパイルできるようになります。
スポンサーサイト

コメントの投稿

非公開コメント

カレンダー
01 | 2018/02 | 03
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 - - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター