В дополнение к тому, что сказал Эван (это правильно), еще одно важное отличие (IMHO) заключается в том, что если вы динамически загружаете функции, вам нужно иметь typedef для приведения void * к нему, чтобы вызвать функцию один раз. он загружен Если заголовочные файлы, которые определяют прототип функции для статического связывания, не имеют механизма для определения typedef для указателя функции из того же кода определения функции шаблона, в итоге вы получите дублированное определение функции, возможно, в вашем коде. Если определения внешних заголовков когда-либо обновляются (например, с новыми определениями для 64-битных типов данных), вы рискуете ошибками времени выполнения в своем приложении, если вы не обновите другие прототипы функций (они не будут обнаружены во время компиляции из-за c- стиль приведен к функции typedef).
Это тонкий вопрос, но важный для рассмотрения. Я бы использовал неявные («статические») ссылки, если вы можете из-за этой проблемы, и если вы используете динамическую загрузку, будьте в курсе этой проблемы и структурируйте свой код так, чтобы избежать проблем в будущем как можно лучше.