Код: Выделить всё
/** Disown some children from one parent.
* Note, children should follow in the same order, as they are added in.
*/
void
component_DisownChildren(
struct Component ** children );
И макро-определение для более простых случаев:
Код: Выделить всё
#define component_DisownChild( child ) \
component_DisownChildren( (struct Component **){child, NULL} )
В одной из функций уже задействовал (вообще-то, сейчас я вписал туда уже раскрытый вариант - пока не решу проблему):
Код: Выделить всё
void component_Delete( struct Component * ptr )
{
if (ptr->parent)
component_DisownChildren( (struct Component **){ptr, NULL} );
free (ptr);
}
При сборке получаю следующие строчки:
Код: Выделить всё
component.c: In function ‘component_Delete’:
component.c:31: warning: initialization from incompatible pointer type
component.c:31: warning: excess elements in scalar initializer
component.c:31: warning: (near initialization for ‘(anonymous)’)
Что я выяснил:
- Если заменить (struct Component **) на (void *), изчезает первое предупреждение (вроде уже хоть какое-то решение).
- Остальные две, кстати, выскакивают для каждого следующего элемента (т.е., при 3-х элементах их всего 4)
Хотелось бы понять, какие тут правила работают.