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

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



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

Если Вы хотите определить в своей программе функцию f, которая принимает
массив декларированных, но не определённых структур S, то имейте в виду,
что передавать надо массив указателей на структуры. То есть должно быть
f(struct S **a).

Вы можете оперировать только интерфейсами структуры, которые описаны
определены в том же файле, что и сама структура, и которые принимают в
качестве параметра указатели на структуру struct S.

Если Вы беспокоитесь по поводу того, как же быть с функцией, которая
объявлена в таком виде в заголовочном файле то тут беспокоиться не
надо. Её реализация будет скомпилирована в свой отдельный объектник из
файла с исходниками этих функций, где в частности будет и определение
структуры.

Потом этот объектник будет слинкован в динамическую библиотеку, и когда
Ваша программа будет пользоваться данной библиотекой, то функции этой
библиотеки всегда будут "знать" размер struct S.

Так проще стало?

Attachment: pgprAbeGRzYXh.pgp
Description: PGP signature


Reply to: