yuri.nefedov@gmail.com writes: > On Tue, 7 Oct 2014, Artem Chuprina wrote: > >> >> y> В С нет разницы между void f(struct S a[]) и void f(struct S *a) >> y> - компилятору это всё равно. >> y> Моё беспокойство было, как будет обрабатываться a[i] или, что то же >> y> самое *(a+i). Как компилятор предотвратит использование такой >> y> конструкции? >> >> Я полагаю, скажет "incomplete type" и обломает компиляцию. >> > > Мы говорим об одном и том же. По стандарту языка С > incomplete type == types that describe objects but lack information > needed to determine their sizes > > Тогда похоже, что между указателями на incomplete type и void* > вообще нет никакой разницы. Тем более что и преобразования > типа void* <-> struct* будут выполнятся молча, даже без > предупреждений. Просто это «сахар» для писателя/читателя программы. > Можно было бы и typedef обойтись. Нет. Поскольку там не void*, а struct S*, Вы гарантированно подсунете в функцию struct S*, а не что-то ещё. А то вдруг у Вас ещё одна библиотека работает по такому же принципу. Тогда у Вас будет struct N* ещё какой-нибудь. И если Вы его ненароком подсунете в функцию, которая принимает struct S*, то получите ошибку на этапе компиляции.
Attachment:
pgpZppA5DUisB.pgp
Description: PGP signature