【发布时间】:2016-01-25 06:25:31
【问题描述】:
最近发现有一些情况是绝对违反了C++的ODR,但是在C编译器中编译是OK的。
例如,这个奇怪的场景(和我一起):
来源 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(即使在Source 2中var_global是unsigned)并且@的重新定义没有错误987654328@.
我知道 C 与 C++ 有不同的规则,但我不认为它有那么大的不同。
我有谷歌并阅读了很多结果,但没有 C++ 的官方结果like this。
所以问题是:
C 有没有像 C++ 一样的定义规则?
和:
官方叫什么?
我需要它与 C++ 的规则进行比较,以便我可以更深入地理解这两种语言。
p/s:我使用 Visual Studio 2010 编译上述代码。
【问题讨论】:
-
"绝对会违反 C++ 的 ODR 但会在 C 编译器中编译正常"。你试过用 C++ 编译器编译它吗?任何实际的错误信息?
-
请不要在回答完问题后更改问题。这会使回答者看起来像傻瓜。 :) 您可以随时edit 提出问题并使用 cmets 要求更清楚。
-
对不起,我提到了我编辑的内容,但不知道为什么它不显示。让我重新编辑一下。
-
嗯...你把这两个文件链接在一起了吗?如何?从我们在您的问题中可以看出,源 1 中没有任何内容被项目使用。这里 C 和 C++ 之间没有区别。因此,您似乎只是在使用 2 个完全不同的链接器并在 C 案例中搞砸了链接?
-
@Lundin 当然我在同一个项目中构建这两个文件。
标签: c++ c global-variables language-lawyer variable-declaration