#
- оператор строкового определения, определенный в разделе 6.10.3.2 (C99) и в разделе 16.3.2.(C ++ 03)
Преобразует параметры макроса в строковые литералы без расширения определения параметра.
Если полученная замена не является допустимым строковым литералом символов, поведение не определено .Порядок вычисления оператора #: неопределен .
Например, синтаксически, вхождения символа обратной косой черты в строковых литералах ограничены escape-последовательностями.
В следующем примере:
1 #define mkstr(x) # x
2 char *p = mkstr(a \ b);
/* "a \ b" violates the syntax of string literals */
результат оператора #
не обязательно должен быть "a \ b"
.