2015-03-02 6 views
0

поэтому, если мы объявляем и определяем структуру до main и хотим использовать эту структуру в другом файле, которые находятся в том же корне, что и этот, нам нужно объявить его снова в этом файле? Особенно я хочу поделиться памятью массива, чей элемент является структурой, поэтому мне нужно использовать shm_get в другом файле, мне нужно снова объявить эту структуру?struct как глобальная переменная

Кстати, это в C

код будет выглядеть следующим образом:

typedef struct { 
char y1; 
char y2; 
char y3; 
int x; 
} itemB; 

int main(){... 
itemB* BufferB; 

то я разделяю память

shmem2 = shm_get(542421, (void**)&BufferB, 30*sizeof(itemB)); 

так, если я пишу другой файл, который хотите поделиться BufferB, я знаю, должен объявить еще один раз BufferB и вызвать shm_get снова использовать тот же самый начальный ключ, но я должен объявить структуру еще раз? и где?

+1

Необходимо указать язык, который вы используете. –

+0

И также поделитесь немного кода, который вы пробовали. –

ответ

1

Объявление структуры не обязательно должно быть видимым, если вы используете только указатель на структуру, но он должен быть видимым для работы sizeof(itemB) или для доступа к любому из элементов структуры посредством имя.

Если определение структуры необходимо в нескольких файлах, то, как правило, определение помещается в общем файле называется заголовком, который #include d из файлов, которые необходимо увидеть определение.

Можно было бы скопировать-вставить определение туда, где оно необходимо, но это подвержено риску обновления одного определения без сохранения синхронного другого определения, которое нарушало бы правило одного определения.

+0

, так что это нормально, если я объявляю структуру до основного в каждом файле, который мне нужен, или я могу просто поместить их в основной файл? @Matt McNabb – Echo

+0

У вашей программы должен быть только один «главный», так что комментарий не имеет смысла. –

+0

У меня есть несколько файлов, которые запускаются индивидуально, но они имеют только общую память, которая является BufferB, которая содержит элементы. @Matt McNabb – Echo