最近,我发现一些情况绝对违反了C++的ODR规则,但在C编译器中仍能正常编译通过。
例如,以下奇怪的情况(与我有关):
源代码1
int var_global=-3;
来源2
#include <stdio.h>
#include <conio.h>
unsigned int var_global;
int main() {
printf("%d \n",var_global);
getch();
return 0;
}
我得到的打印结果是 -3
(即使在源2中var_global
是unsigned
),并且没有关于var_global
的重新定义的错误。
我知道C和C ++有不同的规则,但我认为它们之间的差异不会像这样大。
我已经谷歌搜索并阅读了很多结果,但没有找到C ++官方的类似结果。
所以问题是:
C是否像C ++一样具有“单一定义规则”?
以及:
它正式叫什么名字?
我需要将其与C ++的规则进行比较,以便更深入地理解两种语言。
p / s:我使用Visual Studio 2010编译上面的代码。