Visual Studio コンパイル文字セット [転送]

C++をクロスプラットフォームで開発する際、中国のオペレーティングシステムではよく遭遇するエラーは、error C2001(定数に改行文字が含まれています)です。

Visual Studio

CMakeはプロジェクトのコンパイルスクリプトを組織し、Windows環境での開発時に一時的にソリューションファイルを生成します。クロスプラットフォームである理由として、ファイルエンコーディングにUTF-8を選択しています。

引用資料では、問題の原因について原理に基づき詳細な説明が提供されています。

エンコーディングに関して、MSVCにはコンパイルオプション/source-charset/execution-charsetがあり、これらを使用することで、ほとんどのエンコーディング問題を解決できます。

例えば、WindowsのcmdコマンドプロンプトはデフォルトでGBKエンコーディングしか表示できない場合でも、コードファイル自体がUTF-8で記述されているため、クロスプラットフォームであることや、直接GBKに変換する変更を加えることが難しい状況です。そこで、Win10上で/source-charset:utf-8 /execution-charset:gbkというコンパイルオプションを設定し、コンパイラをUTF-8エンコーディングで読み込み、内部の文字列配列にはGBKエンコーディングで保存することで、直接printf関数を使用してcmdコマンドプロンプトで漢字を表示することができます。

Visual Studio 用の CMake 設定

if(WIN32)
  message(STATUS "WIN32 での構成実行中")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /source-charset:utf-8 /execution-charset:gbk")
endif()

参考文献

金融ITプログラマーのいじくり回しと日常のつぶやき
Hugo で構築されています。
テーマ StackJimmy によって設計されています。