Недавно я узнал, что есть некоторые случаи, которые будут абсолютно нарушать ODR С++, но будут скомпилированы ОК в компиляторе C.
Например, этот wierd сценарий (со мной):
Источник 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 имеет разные правила с С++, но я не думаю, что это так отличается.
У меня есть google и читаю много результатов, но нет официального результата как этот на С++.
Итак, вопрос:
Имеет ли C правило одного определения, например С++?
и
Что это называется официально?
Мне нужно, чтобы он сравнивался с правилом С++, чтобы я мог глубже понять оба языка.
p/s: я использовал Visual Studio 2010 для компиляции кода выше.