yuri.nefe...@gmail.com -> debian-russian@lists.debian.org @ Tue, 7 Oct 2014 14:15:27 +0400 (MSK):
>> y> p.s. Вообще-то надо понимать, что декларация (объявление) - >> y> это всего лишь сообщение компилятору, что такой объект существует. >> y> Ну сообщили, что структура где-то определена, но потом-то >> y> будете пользоваться полями этой структуры. Так что утверждение, >> y> что перекомпиляция не нужна, я не понимаю. >> >> Ты такой умный, но таких простых вещей не понимаешь. Имеется в виду, >> что если библиотека не предоставляет определения структуры, и >> следовательно, использующая ее программа не может пользоваться ее >> полями, а может пользоваться только функциями этой библиотеки, передавая >> ей или получая от них указатели на такую структуру, то при изменениях >> этой структуры потребуется перекомпиляция только библиотеки, но не >> использующих ее программ (ну, при условии, что библиотека динамическая, >> а не вкомпилируется в бинарник программы). Поскольку API не меняется ни >> текстовый, ни бинарный. Называется этот прием "непрозрачный указатель" >> (opaque pointer), иногда говорят "непрозрачная структура" (opaque >> structure) и используется в хвост и в гриву, начиная с libc (FILE *). >> >> Объявление структуры при этом нужно исключительно для контроля типов, >> чтобы не передать в функцию указатель не на то. А так можно было бы >> ограничиться и void *. >> y> Ну да, не такой умный, но _это_ я понимаю.) y> В этом контексте слово структура совсем не важно. y> Указатель он и в Африке указатель. y> В этом случае нельзя передавать массивы: y> void f(struct S a[]) == void f(struct S* a) y> так как sizeof(struct S) может поменяться. y> Даже без обращения к полям. Да, но из этого всего лишь следует, что API библиотеки не будет содержать void f(struct S a[]). Поскольку, не имея определения S, ты не сможешь в своей программе самостоятельно создать оный массив, то оно тебе и не надо. Надо сказать, что мне в моей довольно богатой программистской практике ни разу не пришлось воспользоваться функцией с аргументом типа массив... y> Это не возражение. Это уточнение. y> Размер грабель неопределен. Последней фразы я не понял. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/878uksdvr5....@wizzle.ran.pp.ru