Пусть у меня есть a.c
и b.c
, которые оба определяют типы, называемые struct foo
, с различными определениями:Разные единицы перевода позволяют определять структуры с тем же именем?
#include <stdio.h>
struct foo {
int a;
};
int a_func(void) {
struct foo f;
f.a = 4;
printf("%d\n", f.a);
return f.a * 3;
}
#include <stdio.h>
struct foo { // same name, different members
char *p1;
char *p2;
};
void b_func(void) {
struct foo f;
f.p1 = "hello";
f.p2 = "world";
printf("%s %s\n", f.p1, f.p2);
}
В C, могут ли эти файлы и быть связаны друг с другом как части стандартов -конформирующая программа?
(В C++, я считаю, что это запрещено One Definition Rule.)
Конечно ... пока в каком-либо контексте видится только одно определение. Но будьте осторожны с extern, что вы не ссылаетесь на объект, созданный с другим определением, чем тот, с которым вы обращаетесь к нему с помощью ... – Dmitri
Как сказал dimitri, techincally да, но я бы сказал, что это не идеальный стиль кодирования. – Taelsin
Нет ничего плохого в стиле кодирования, и extern не имеет к этому никакого отношения. –