Я компилирую код низкого уровня, используя много байтов. В некоторых случаях мне удобно определить, используя старые кавычки C в двойных кавычках.
Но при компиляции с помощью gcc или g ++ (не знаю поведения с другими компиляторами) меня беспокоит знак заостренной строки.
В основном, когда я пишу это
const unsigned char & refok = *"ABCDEFGHI";
РЕДАКТИРОВАТЬ : хорошо, приведенный выше код на самом деле не работает, так как теоретически он будет содержать ссылку на копию первого символа строки. Это на самом деле разрешает доступ ко всей строке с некоторыми компиляторами из-за оптимизации, но может сломаться в любое время.
или это
const unsigned char oktoo[10] =
{'A','B','C','D','E','F','G','H','I',0};
компилятор ничего не говорит.
Но это однозначно отвергает:
const unsigned char * bad = "ABCDEFGHI";
с сообщением
error: invalid conversion from
‘const char*’ to ‘const unsigned char*’
[-fpermissive]
Это даже не предупреждение, это ошибка .
Мне интересно, почему этот вопрос должен вызывать больше проблем, чем при использовании ссылки или преобразовании отдельных символов из подписанных в неподписанные? Или я что-то упустил?