- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
#define CHAINFREE_STATIC_DAT(a, field) {\
ptr=(typeof(ptr))&(a);\
if(((typeof(&(a)))(ptr))->field)\
free(((typeof(&(a)))(ptr))->field);\
ptr=(typeof(ptr))(((typeof(&a))(ptr))->next);\
if(ptr) {\
while(((typeof(&(a)))(ptr))->next) {\
if(((typeof(&(a)))(ptr))->field)\
free(((typeof(&(a)))(ptr))->field);\
ptr=(typeof(ptr))(((typeof(&a))(ptr))->next);\
free(((typeof(&(a)))(ptr))->prev);\
}\
if(((typeof(&(a)))(ptr))->field)\
free(((typeof(&(a)))(ptr))->field);\
free(ptr);\
}\
memset(&(a), 0, sizeof(a));\
}
Да и нет typeof в С. Помоему только в GNU C++.
и откуда это чудо?
Это жутко нечитаемый кусок код, но функцию он свою выполняет как надо. Видел в одном месте использование "макро-функции" в "макро-функциях", притом что они размером порядком больше этой, вот там действительно катастрофа; а тут, IMHO, достаточно просто попросить причесать немного код)