У меня есть следующий исходный код, который меня интересует.
#include <stdio.h>
extern int foo;
int foo = 32;
int main()
{
printf("%d", foo);
}
Это совершенно нормальный кусок кода, и когда я его компилирую с помощью
gcc -Wall -Wextra -pedantic foo.c
Я не получаю никаких предупреждений.
И это кажется странным, потому что переменная определяется как внешняя, так и глобальная в том же файле. Я вполне уверен, что компоновщику легко найти ссылку на внешнюю переменную в том же файле, но разве это не похоже на ошибку кодирования? И если да, то почему компилятор не предупреждает об этом?