我已经阅读了关于外部/内部链接的现有问题。我的问题是不同的 - 如果我在不同的翻译单元中有多个相同变量的定义和外部链接会发生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++ 有什么区别?这种行为是否未定义且依赖于编译器?这段代码有多“糟糕”,如果我想重构它应该怎么做(我遇到过很多这样写的旧代码)?