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()