しかし、私の場合そのコードを実行するのは殆どLinux上だったりするので、バグ取りとか細かい修正はLinux上で行います。そのときに使うのは主にvi(実際はvim)。で、viは漢字コードの違いを吸収してくれるので、SJISでもUTF8でも編集できるのですが、同じくらいよく使うコマンドにlessがありまして、こちらはUTF8でないと表示してくれません。lv等を使えば良いのですが、データファイルなどはUTF8で統一しつつあるので、この際ソースコードもUTF8にしよう!と思ったら嵌りました。
同じように嵌っている人が沢山いらっしゃいまして、「UTF8 visual studio」などで検索すると、BOMありUTF8ならばVSで使えるとのことで、早速変換してVSでコンパイルが通ることを確認し、Linuxに持って行ったら、gccでコンパイルが通らない。実はこちらも過去の遺産があって、「gcc UTF8」などで検索すれば、gccではBOM無しUTF8ならばOKとのこと。
BOMの有無でバッティングしているので、どうすればよいか。これまた「UTF8 gcc visual studio」等で検索すると答えが見つかりまして、本当にgoogleは(というより、記事を挙げてくれた皆様)何でも教えてくれます。ありがたいことです。
結論としては、
- 漢字コードはBOM無しUTF8
- 改行コードはCR+LF
- VSでは文字コードを判別できない旨のワーニングが出るが、無視。(VSは文字コードをBOMで判断しているから、とのことらしい。目障りならばpragmaでwarningを消せばよい。)
これで、gccでもVSでもコンパイルできる(はず・・・実際は私はgccではなくg++で確認しましたが、たぶん大丈夫ではないかと)。
--追記--
warningを消すのはソースコードにpragmaを入れるよりも、VSの方でコンパイル時のオプションとしてたてる方がいいですね。VSで、プロジェクトのプロパティに「構成プロパティ」→「C/C++」→「詳細」→「指定の警告を無効にする」というのがあるので、ここで4819を追加すればOKです。




