Компиляция источника в кодировке UTF-8 с разделителями строк Unicode - PullRequest
1 голос
/ 16 февраля 2009

Используя последнюю версию компилятора Microsoft (входит в комплект Win7 SDK), я пытаюсь скомпилировать исходный файл, закодированный с использованием UTF-8 с разделителями строк в кодировке Unicode.

К сожалению, код не будет компилироваться - даже если я включу подпись UTF-8 в начале файла. Например, если я попытаюсь скомпилировать это:

#include <stdio.h>

int main (void)
{
    printf("Hello!");
    return 0;
}

Я увижу следующую ошибку:


Подсказка> cl test.c

32-разрядный оптимизирующий компилятор C / C ++ Microsoft (R) версии 15.00.30729.01 для 80x86 Авторское право (C) Microsoft Corporation. Все права защищены.

test.c test.c (1): предупреждение C4067: неожиданные токены в соответствии с директивой препроцессора - ожидал новой строки Инкрементальный компоновщик Microsoft (R), версия 9.00.30729.01 Авторское право (C) Microsoft Corporation. Все права защищены.

/ выход: test.exe test.obj ССЫЛКА: фатальная ошибка LNK1561: должна быть определена точка входа


Кто-нибудь сталкивался с этой проблемой раньше? Любые решения?

Спасибо! Andrew

Ответы [ 4 ]

2 голосов
/ 16 февраля 2009

Отправлено сообщение об ошибке в Microsoft с идентификатором 414985. Мех. Посмотрим, что из этого выйдет.

2 голосов
/ 16 февраля 2009

Вы имеете в виду этот символ , в отличие от традиционных символов CR LF.

Я предполагаю, что компилятор ожидает только некоторую комбинацию CR и LF.

2 голосов
/ 16 февраля 2009

Когда вы говорите «разделители строк Unicode», вы имеете в виду UTF-16 / UCS-2 (т.е. 16-битные символы)? Если это так (файл представляет собой смесь различных кодировок), я бы сказал, что единственное разумное решение - это исправить файлы.

Если вы имеете в виду, что окончания строк - это какая-то другая кодовая точка Unicode (все еще закодированная в UTF-8), вам все равно придется исправить файлы. Стандарт говорит об этом на первом этапе перевода:

Физические символы исходного файла отображаются в соответствии с реализацией образом, к основному источнику набор символов (ввод новой строки символы для конца строки показатели) при необходимости.

Очевидно, что MS не выполняет этот перевод для 'разделителей строк в Юникоде', поэтому вам нужно.

0 голосов
/ 16 февраля 2009

Мне кажется довольно очевидным, после #include должен быть перевод строки.

Символы новой строки по-прежнему являются юникодом, поэтому добавление одного не должно быть слишком сложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...