簡體   English   中英

MinGW64 - Unicode 源文件錯誤?

[英]MinGW64 - Unicode source file errors?

我從我的一個學生那里收到了一個 C++ 源代碼文件,他在 Visual Studio 2017 中創建了它,它在他的機器上正確編譯和鏈接。 作為測試,我也在我的 Windows 10 機器上使用 VS2017、Clang v7.0.0、Intel Parallel Studio XE 2019 和 g++(x86_64-posix-seh-rev0,由 MinGW-W64 項目構建)8.1.0 中的每一個編譯了它。 除了 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 或兩者中的某些設置導致生成此類文件,可能是默認語言/區域設置選擇。 因此,我有兩個問題:

  1. MinGW-W64 配置中是否有一些設置允許它處理這些類型的文件而不會像 VS、Intel 和 Clang 已經做的那樣抱怨? 如果是,那是什么?

  2. 如果 Windows 或 VS 中的某些設置導致 VS 編輯器生成這些類型的文件,那么必須更改哪些內容才能僅創建純 ASCII 文件?

我總是不鼓勵學生僅僅因為這樣的問題就生成 Unicode 文件,但我也會給他們一些信息,告訴他們如何在發生這種情況時避免這樣做。 我會上傳實際的源代碼文件,但我找不到在這個網站上做的方法。

謝謝,雷

我的第一個猜測是這是一個 Unicode 文件

正是如此。 具體來說,它以小端 UTF-16 編碼。

我的假設是,他的 Windows 10 配置或 VS 或兩者中的某些設置導致生成此類文件,可能是默認語言/區域設置選擇。

這與 Windows 或語言環境無關,它僅在 Visual Studio 中嚴格執行。

MinGW-W64 配置中是否有一些設置允許它處理這些類型的文件而不會像 VS、Intel 和 Clang 已經做的那樣抱怨? 如果是,那是什么?

看看-finput-charset

如果 Windows 或 VS 中的某些設置導致 VS 編輯器生成這些類型的文件,那么必須更改哪些內容才能僅創建純 ASCII 文件?

請參閱 Visual Studio 2017 文檔中的以下文章:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM