Что делает extern
среднее ключевое слово? Я видел это перед объявлением функции как
extern void DoFoo ...
extern
дает имя внешняя связь. Это означает, что объект или функция доступны через это имя из других единиц трансляции в программе. Для функций это связь по умолчанию в любом случае, поэтому ее использование (в этом контексте) обычно избыточно.
Ключевое слово extern объявляет переменную или функцию и указывает, что она имеет внешнюю связь (ее имя видно из файлов, отличных от того, в котором она определена). При модификации переменной extern указывает, что переменная имеет статическую длительность (она выделяется при начале программы и деаллоцируется при ее завершении). Переменная или функция может быть определена в другом исходном файле или позже в том же файле. Объявления переменных и функций в области видимости файла по умолчанию являются внешними.
Вы можете найти более полное описание здесь.