Итак, насколько я знаю, это законно в C:
foo.c
struct foo {
int a;
};
bar.c
struct foo {
char a;
};
Но то же самое с функциями является незаконным:
foo.c
int foo() {
return 1;
}
bar.c
int foo() {
return 0;
}
и приведет к связыванию ошибки (множественное определение функции foo
).
Это почему? Какая разница между именами структур и именами функций, которые не позволяют C обрабатывать один, но не другой? Также это поведение распространяется на C++?