Можно присвоить ASCII буквального (не могу назвать это строка) до значения enum
следующим образом:Присвоить многобайтовая ASCII литералов в перечислении значений
#include <iostream>
// Macro to handle BIG/LITTLE ENDIAN
// Endianness is suppoesed to handled in this macro
#define TEMP(X) X
enum t
{
XX = 'AA', // 0x4141 or 0100 0001 0100 0001
};
int main()
{
std::cout<<XX<<std::endl;
}
И компилятор компилирует его и генерирует гекса-десятичную константу в время компиляции, 0x4141
в этом случае. Он генерирует предупреждение о компиляции как:
main.cpp:9:14: warning: multi-character character constant [-Wmultichar]
XX = 'AA', // 0x4141 or 0100 0001 0100 0001
Мой вопрос здесь, можем ли мы избежать этого предупреждения?
Или мы можем написать более элегантный код для достижения аналогичного результата, возможно, используя шаблоны и constexpr?
Я ищу портативную альтернативу, чтобы я мог избавиться от этого как части рефакторинга, не затрагивая основную логику.
«Элегантный» код не использует многобайтовые символьные константы. Они просто не переносимы. http://stackoverflow.com/questions/7755202/multi-character-constant-warnings –
Многосимвольное поведение констант определяется реализацией. Не используйте их, и ваш код будет более переносимым * и * не генерирует предупреждения. Что случилось с '0x4141'? – DevSolar
В gcc это предупреждение можно отключить с помощью ['-Wno-multichar'] (https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wno-multichar-608). Имейте в виду, что вы полагаетесь на поведение, определенное при реализации. Таким образом, это не поможет вам, но может помочь другим читателям. –