2013-09-02 4 views

ответ

3

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

Декларации не должны быть буквально одинаковыми. Пока они задают одни и те же типы в одном и том же порядке, такие вещи, как имена участников и имя типа структуры, не должны совпадать. Так что если вы делаете:

file1.c:

struct { 
    int i; 
    char c; 
} var1; 

и file2.c:

typedef struct newstruct { 
    int v1; 
    char v2; 
} newstruct_t; 
newstruct_t var2; 

затем var1 и var2 одного и того же типа.

Полная информация немного сложнее, но это полезное приближение.

Однако программирование, подобное этому, будет путать. Если вы собираетесь делиться типом между файлами, вы должны поместить объявление в файл заголовка, а #include - во все исходные файлы, которые его используют.

+1

Право. Чтобы убедиться, что вы получаете одно и то же объявление в обоих файлах, рекомендуется применить ваше объявление 'struct' в заголовочном файле и включить его из обоих файлов' .c'. – nickie

+0

@nickie Я подумал, что это то, что он имел в виду, когда сказал _include объявление_, но теперь я вижу, что он мог бы означать, что объявления должны быть непосредственно в исходные файлы, а не использовать '# include'. – Barmar

+0

Что делать, если одно объявление содержит тег, а другое - нет. Будут ли они по-прежнему одного типа? – chanzerre

Смежные вопросы