Вы создаете универсальное имя символа, соединяя лексемы с ##
оператор
Этот дефект возникает, когда две лексемы предварительной обработки соединяются с ##
оператор создает универсальное имя символа. Универсальное имя символа начинается с \u
или \U
за которым следуют шестнадцатеричные цифры. Он представляет символ, не найденный в основном наборе символов.
Например, вы формируете символ \u0401
путем присоединения к двум лексемам:
#define assign(uc1, uc2, val) uc1##uc2 = val ... assign(\u04, 01, 4);
Стандарт C11 (раздел 5.1.1.2) утверждает, что, если универсальное имя символа образовано конкатенацией токенов, поведение не определено.
Используйте универсальное имя символа непосредственно вместо создания его посредством конкатенации токенов.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: PRE_UCNAME_JOIN_TOKENS |
Влияние: Низкое |