2010-07-27 9 views
0

Недавно я решил переключиться на clang из gcc, и я получаю следующее предупреждение для использования широких символьных констант: «посторонние символы в широкая постоянная символа игнорируется ". Вот код, который получает предупреждение:Использование широких констант символов с clang Получает «посторонние символы в символе с широким символом игнорируются» Ошибка

wstring& line; 
… 
for (wstring::iterator ch = line.begin(); ch != line.end(); ++ch) 
    switch (*ch) { 
     case L'│': *ch = L'|'; break; 
     case L'﹤': *ch = L'<'; break; 
     case L'﹥': *ch = L'>'; break; 
     case L'﹙': *ch = L'('; break; 
     case L'﹚': *ch = L')'; break; 
     default: break; 
    } 

Здесь персонажи в условиях случае являются все высокого юникод символов и поэтому рассматривается как многобайтовые символы по лязг парсер, по-видимому (исходный код UTF-8 кодируются).

Вопрос в том, что является смыслом для предупреждения. То есть, что именно игнорируется. Кроме того, учитывая это предупреждение, будет ли моя программа работать в соответствии с проектом?

gcc не дает никаких предупреждений для этого кода, и все работает как шарм.

ответ

1

В основе программы лежит интерпретация исходного файла. Вы знаете, что кодировка UTF-8. Вот почему 6 байтов L'﹤' должны интерпретироваться как 4 символа Unicode. Но как бы знать, что знаешь? Он видит 6 байтов и принимает 8-битную кодировку. Таким образом, он видит L'xyz' (точные символы зависят от предполагаемого набора символов в 8 бит). clang говорит вам, что он интерпретирует L'xyz' как L'x', игнорируя y и z. Крайне маловероятно, что он работает по назначению.

+1

У Hmm gcc никогда не возникло проблемы. Есть ли способ сказать clang правильно обрабатывать исходные файлы UTF-8 или, альтернативно, вводить широкие символы, чтобы их понимали? –

+1

http://github.com/bratsche/clang не предлагает: IV. Отсутствующие функциональные возможности/улучшения Lexer: * Отображение символа источника. GCC поддерживает ASCII и UTF-8. – MSalters

 Смежные вопросы

  • Нет связанных вопросов^_^