MinGW64 - Ошибки исходного файла Unicode? - PullRequest
0 голосов
/ 09 октября 2018

Я получил файл исходного кода 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 только из-за подобных проблем, но я бы также дал им некоторую информацию о том, как этого избежать, когда это происходит.бывает.Я бы загрузил сам файл исходного кода, но не смог найти способ сделать это на этом сайте.

Спасибо, Рэй

1 Ответ

0 голосов
/ 09 октября 2018

Моим первым предположением было, что это был файл Unicode

Это именно то, что есть.В частности, он закодирован в формате с прямым порядком байтов UTF-16.

Я предполагаю, что некоторые настройки в его конфигурации Windows 10 или в VS, или, возможно, в обоих, вызывают генерацию файлов этого типа,возможно выбор языка / локали по умолчанию.

Это не имеет ничего общего с Windows или локалями, это строго только в Visual Studio.

Существуют ли какие-либо настройки в конфигурации MinGW-W64, которые позволят ему обрабатывать файлы такого типа без каких-либо жалоб, как это делают VS, Intel и Clang?Если так, что это?

Посмотрите на -finput-charset.

Если некоторые настройки в Windows или VS вызывают создание файлов этих типов с помощью VSредактор, в частности, что нужно изменить, чтобы вместо этого создавались просто простые файлы ASCII?

См. следующие статьи в документации по Visual Studio 2017:

...