Я разрабатываю кроссплатформенный C++, используя Microsoft Visual Studio на Windows и GCC на uBuntu Linux.
В Visual Studio я могу использовать в коде символы юникода, такие как "π" и "²". Visual Studio всегда сохраняет исходные файлы в формате UTF-8 с BOM (Byte Order Mark).
Например:
// A = π.r²
double π = 3.14;
GCC успешно компилирует эти файлы, только если я сначала удалю BOM. Если я не удаляю BOM, я получаю ошибки, подобные этим:
wwga_hydutils.cpp:28:9: error: stray '\317' in program
wwga_hydutils.cpp:28:9: error: stray '\200' in program
Что приводит меня к вопросу:
Есть ли способ заставить GCC компилировать файлы UTF-8 без предварительного удаления BOM?
Я использую:
и:
Edit:
Как указал первый комментатор, моя проблема была не в BOM, а в наличии неascii символов вне строковых констант. GCC не любит неascii символы в именах символов, но оказалось, что GCC полностью совместим с UTF-8 с BOM.