У этого способа объявления есть одно большое преимущество:
Если только одна или несколько функций вызывают внешнюю функцию, это объявление имеет смысл, особенно в большом исходном файле.
Если необходимо выполнить более позднюю реструктуризацию кода (перемещение функции в другом файле), гораздо проще увидеть зависимости, чем добавлять внешние объекты в глобальную (файловую) область.
В последнем случае вероятность «забыть» такие внешние данные в файле выше. Напротив, объявив его в области видимости функции, объявление переместится вместе с функцией ...
Я также склонен делать это для внешних глобальных переменных - преимущество приходит позже, когда поддерживается и, в конечном итоге, реструктурируется / минимизируется зависимость.
Последнее примечание к теме «Написание внешнего / не внешнего»:
Если это просто предварительное объявление (-> функция определена в конце того же файла), я бы не рекомендовал использовать external - потому что это просто не тот случай.
В противном случае внешний имеет абсолютный смысл указывать на то, что определение должно быть найдено где-то еще (или для библиотек: пользователям этого библиотеки может потребоваться реализация).
Надеюсь, это поможет (как шаг к более объективному стилю программирования .. :))