LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

#define GREATGRANDPA_VAR_PAR (*p)->prev->prev->prev
#define GRANDPA_VAR_PAR (*p)->prev->prev
#define RIGHT_UNCLE_VAR_PAR (*p)->prev->prev->right
#define LEFT_UNCLE_VAR_PAR (*p)->prev->prev->left
#define RIGHT_UNCLE p->prev->prev->right
#define LEFT_UNCLE p->prev->prev->left
#define DAD_VAR_PAR (*p)->prev
#define DAD p->prev
#define RIGHT_BRO_VAR_PAR (*p)->prev->right
#define LEFT_BRO_VAR_PAR (*p)->prev->left
#define RIGHT_BRO p->prev->right
#define LEFT_BRO p->prev->left
#define LEFT_SON_VAR_PAR (*p)->left

в этих декларациях у тебя используется то p, то (*p)… стоит подставить такую макру в неверном контексте, как будут бага.

все такие макры надо писать с явным параметром, и правильно подставлять его при использовании:

#define GREATGRANDPA_VAR_PAR(ptr)  (*ptr)->prev->prev->prev

Исходная версия alysnix, :

#define GREATGRANDPA_VAR_PAR (*p)->prev->prev->prev
#define GRANDPA_VAR_PAR (*p)->prev->prev
#define RIGHT_UNCLE_VAR_PAR (*p)->prev->prev->right
#define LEFT_UNCLE_VAR_PAR (*p)->prev->prev->left
#define RIGHT_UNCLE p->prev->prev->right
#define LEFT_UNCLE p->prev->prev->left
#define DAD_VAR_PAR (*p)->prev
#define DAD p->prev
#define RIGHT_BRO_VAR_PAR (*p)->prev->right
#define LEFT_BRO_VAR_PAR (*p)->prev->left
#define RIGHT_BRO p->prev->right
#define LEFT_BRO p->prev->left
#define LEFT_SON_VAR_PAR (*p)->left

в этих декларациях у тебя используется то p, то (*p)… стоит подставить такую макру в неверном контексте, как будут бага.

все такие макры надо писать с явным параметром, и правильно подставлять его при использовании: #define GREATGRANDPA_VAR_PAR(ptr) (*ptr)->prev->prev->prev