AFAIK, любое объявление переменной или функции в области файлов имеет внешнюю привязку по умолчанию. static означает "он имеет внутреннюю связь", extern - "он может быть определен в другом месте", а не "имеет внешнюю связь".
Если да, зачем нам ключевое слово extern? Другими словами, в чем разница между int foo; и extern int foo; (область файла)?