[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Чёртов язык Си!



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 обойтись.

Ю.

Reply to: