yuri.nefedov@gmail.com writes:
Тогда похоже, что между указателями на incomplete type и void*
вообще нет никакой разницы. Тем более что и преобразования
типа void* <-> struct* будут выполнятся молча, даже без
предупреждений. Просто это «сахар» для писателя/читателя программы.
Можно было бы и typedef обойтись.
Нет. Поскольку там не void*, а struct S*, Вы гарантированно подсунете в
функцию struct S*, а не что-то ещё. А то вдруг у Вас ещё одна библиотека
работает по такому же принципу. Тогда у Вас будет struct N* ещё
какой-нибудь. И если Вы его ненароком подсунете в функцию, которая
принимает struct S*, то получите ошибку на этапе компиляции.