我从一个在Visual Studio 2017中创建它的学生那里收到了一个C ++源代码文件,该文件在他的计算机上正确编译和链接。作为测试,我也使用VS2017,Clang v7.0.0,Intel Parallel Studio XE 2019和g ++(x86_64-posix-seh-rev0,由MinGW-W64项目构建)中的每一个在Windows 10计算机上编译了它。除了MinGW-W64以外,它都能很好地编译,它会产生许多错误和警告,如下所示:
C:\temp>g++.exe -c MyFile.cpp
MyFile.cpp:1:1: error: stray '\377' in program
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:2: error: stray '\376' in program
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:3: error: stray '#' in program
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:4: warning: null character(s) ignored
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:6: warning: null character(s) ignored
■# i n c l u d e < i o s t r e a m >
^
MyFile.cpp:1:8: warning: null character(s) ignored
■# i n c l u d e < i o s t r e a m >
^
我用十六进制编辑器查看了源代码文件,发现前两个字节的十六进制值分别为FF和EF。之后,每个ASCII字节前面都有一个00字节。我的第一个猜测是这是一个Unicode文件(或类似文件)。
我的假设是,他的Windows 10配置或VS中的某些设置(或可能两者兼而有之)正在导致生成这种类型的文件,这可能是默认的语言/语言环境选择。因此,我有两个问题:
MinGW-W64配置中是否存在一些设置,使其可以处理这些类型的文件而不会像VS,Intel和Clang那样抱怨?如果是这样,那是什么?
如果Windows或VS中的某些设置导致这些类型的文件由VS编辑器生成,特别是必须更改哪些内容才能仅创建纯ASCII文件?
由于这样的问题,我总是劝阻学生不要制作Unicode文件,但是我也会给他们一些信息,说明在这种情况发生时如何避免这样做。我会上载实际的源代码文件,但在此网站上找不到解决方法。
谢谢, 雷
答案 0 :(得分:2)
我的第一个猜测是这是一个Unicode文件
就是这样。具体来说,它是以小尾数UTF-16编码的。
我的假设是,他的Windows 10配置或VS中的某些设置,或者可能两者兼而有之,都会导致生成这种类型的文件,这可能是默认的语言/区域设置。
这与Windows或语言环境无关,仅在Visual Studio中严格。
MinGW-W64配置中是否有一些设置可以使它处理这些类型的文件,而不会像VS,Intel和Clang那样抱怨呢?如果是这样,那是什么?
看-finput-charset
。
如果Windows或VS中的某些设置导致这些类型的文件由VS编辑器生成,特别是必须更改哪些内容才能仅创建纯ASCII文件?
请参阅Visual Studio 2017文档中的以下文章: