Я компилирую код низкого уровня, используя много пучков байтов. В некоторых случаях мне удобно определить, используя двойные кавычки, вложенные в старые строки C.
Но при компиляции с помощью gcc или g++ (не знаю поведения с другими компиляторами), он продолжает беспокоить меня знаком указательной строки.
В основном, когда я пишу это
const unsigned char & refok = *"ABCDEFGHI";
РЕДАКТИРОВАТЬ: хорошо, код выше не работает, так как теоретически просто сохранит ссылку на копию первого char строки. Фактически это разрешает доступ ко всей строке с некоторыми компиляторами из-за оптимизации, но может прерываться в любое время.
или
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]
Это даже не предупреждение, это ошибка.
Мне интересно, почему этот вопрос должен быть более проблематичным, чем при использовании ссылки или преобразовании отдельных символов из подписанных символов в неподписанные символы? Или я что-то упускаю?