C++跨平台开发,中文操作系统经常能碰到:error C2001常量中有换行符

visual studio

cmake组织项目编译脚本,windows系统下面开发时,临时生成一份解决方案,跨平台的原因,文件编码选择utf-8

引用资料从原理出发详细的解释了问题的的成因

针对编码,MSVC有专门的编译选项/source-charset/execution-charset,前者表示文件本身的编码,后者表示编译以后的字符数组内的字节是什么编码,编码问题基本可以用这两个选项解决。

比如,windowscmd控制台默认只能显示GBK编码,但是代码文件本身是UTF-8,因为跨平台的缘故,又不方便直接修改成GBK,当然这里就不包括为不同平台写编码转换代码这种办法。在Win10上,可以设置这两个编译选项为/source-charset:utf-8 /execution-charset:gbk,表示让编译器以UTF-8编码读入,然后转为GBK保存在数组里面,这样直接printf就能在cmd控制台上正常显示汉字。

CMake 针对 Visual studio 设置

if( WIN32 )
    message( STATUS "Configuring trade on WIN32")
    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /source-charset:utf-8 /execution-charset:gbk")
endif()

参考资料