Wiki говорит:
Ключевое слово
extern
означает "объявить без определения". Другими словами, это способ явно объявить переменную или принудительно объявить без определения. Можно также явно определить переменную, т.е. принудительное определение. Это делается путем назначения значения инициализации переменной.
Это означает, что объявление extern
, которое инициализирует переменную, служит определением для этой переменной. Итак,
/* Just for testing purpose only */
#include <stdio.h>
extern int y = 0;
int main(){
printf("%d\n", y);
return 0;
}
должен быть действительным (скомпилирован в С++ 11). Но при компиляции с параметрами -Wall -Wextra -pedantic -std=c99
в GCC 4.7.2 выдается предупреждение:
[Warning] 'y' initialized and declared 'extern' [enabled by default]
который не должен. AFAIK,
extern int y = 0;
фактически совпадает с
int i = 0;
Что здесь не так?