Недавно я решил переключиться на 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 не дает никаких предупреждений для этого кода, и все работает как шарм.
У Hmm gcc никогда не возникло проблемы. Есть ли способ сказать clang правильно обрабатывать исходные файлы UTF-8 или, альтернативно, вводить широкие символы, чтобы их понимали? –
http://github.com/bratsche/clang не предлагает: IV. Отсутствующие функциональные возможности/улучшения Lexer: * Отображение символа источника. GCC поддерживает ASCII и UTF-8. – MSalters