Я смущен и почему следующие работы:Отсутствие extern для переменной в C, но все же работает?
test.c
#include <stdio.h>
int g;
// ??? should be extern int g; ???
int main(){
printf("%i\n", g);
return 0;
}
lib.c
int g = 3;
Почему я не получаю дубликат ошибки символа при компиляции? Я получаю ошибку, пытаясь сделать это на C++, так что это меня удовлетворяет. Однако в этом примере все компилируется и работает (т. Е. Успешно печатает 3) независимо от того, включен я или нет extern. Из чтения всех других вопросов о StackOverflow об extern в C все, кажется, говорят, что extern, используемый в переменной, объявляет переменную, но не определяет (то есть выделяет память) для нее. Но здесь, если я не использую extern, тогда я определяю две отдельные переменные, называемые g, поэтому должна быть какая-то повторяющаяся ошибка символа. Но нет, поэтому я очень смущен.
Вы не включая 'lib.c '? – Carcigenicate
Как вы его компилируете/связываете? –
Это странно C (но не C++). Посмотрите здесь: http://stackoverflow.com/questions/3095861/about-tentative-definition, или здесь: http://ninjalj.blogspot.ch/2011/10/tentative-definitions-in-c.html –