Имена макросов не могут содержать .
внутри них. Вот почему вы получаете предупреждение:
warning: missing whitespace after the macro name
, после LIST
он ожидает пробел, но вместо этого получает .
.
Также, когда имя макроса находится внутри строки (между "string"
), оно не заменяется определением макроса.
Вы можете сделать это вместо:
#define LISTH "onus"
// and then
printf(LISTH);
, в который препроцессор преобразует:
printf("onus");
Если вы делаете:
#define LISTH "onus";
препроцессор преобразует его в:
printf("onus";);
, который не будет компилироваться.