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: