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

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



yuri.nefedov@gmail.com -> debian-russian@lists.debian.org  @ Tue, 7 Oct 2014 15:45:51 +0400 (MSK):

 >> 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>  Размер грабель неопределен.
 >>
 >> Последней фразы я не понял.
 >>

 y>  В С нет разницы между void f(struct S a[]) и  void f(struct S *a)
 y>  - компилятору это всё равно.
 y>  Моё беспокойство было, как будет обрабатываться a[i] или, что то же
 y>  самое *(a+i). Как компилятор предотвратит использование такой
 y>  конструкции?

Я полагаю, скажет "incomplete type" и обломает компиляцию.


Reply to: