Понимание кода с макросами всегда довольно трудоемкий процесс, особенно когда в них появляются # (подстановка строки) и ## (конкатенация строк).
Оператор #. Порция символов за символом '#' напрямую подставляется в код программы. Например, если определен макрос:
#define TXT_TO_STRING(x) #x
.. то появление в коде выражения TXT_TO_STRING(foo) будет аналогично текстовой строке "foo":
TXT_TO_STRING(foo) // это будет заменено на "foo"
Оператор ##. Это оператор слияния текста в коде. Он часто используется в макросах для синтеза имен переменных из аргументов макроса. Например, если определен макрос:
#define MACRO(abc, def) {#def ## #abc}
.. то строка
char result[10] = MARCO(DEAD, BEEF);
.. будет эквивалентна следующему коду:
char result[10] = "BEEFDEAD";
[Ссылки]
1. What does the # and ## means in C preprocessor macro of c++ site:stackoverflow.com. |