我已经阅读了SO上关于外部链接和内部链接的现有问题。我的问题不同——如果我在不同的翻译单元中使用具有外部链接的相同变量的多个定义,会发生什么事情,在C和C++下是如何处理的?
例如:
/*file1.c*/
typedef struct foo {
int a;
int b;
int c;
} foo;
foo xyz;
/*file2.c*/
typedef struct abc {
double x;
} foo;
foo xyz;
使用Dev-C++作为C程序,上述程序可以完美编译和链接;但如果将其编译为C++程序,则会出现多次重新定义的错误。为什么在C下可以工作,在C++下有何差别?这种行为是否未定义且取决于编译器?这段代码有多“糟糕”,如果我想重构它(我已经遇到了许多像这样旧代码),我应该怎么做?
inline
函数是特殊的,因为它们可以在每个翻译单元中定义一次,但其他函数必须在每个程序中仅被定义一次。 - CB Bailey