p имеет тип macro
, но macro_list.next имеет тип macro *
.
Вместо определения macro_list как struct macro
(с пустым именем и телом) я бы определил его какa struct macro *
.
Также, когда вы проходите по списку, вы хотите, чтобы p = p->next;
перешел к следующему элементу в списке.На самом деле вы всегда присваиваете macro_list.next
, поэтому вы будете неоднократно смотреть на первый элемент в списке.
Чтобы просмотреть связанный список, я обычно использую:
struct macro *macro_list = NULL;
for (p=macro_list; p!= NULL; p=p->next)
printf("%s %s\n", p->macro_name, p->macro_body);