Почему вы используете `extern void my_func ();` вместо того, чтобы включать `my_utils.h`? - PullRequest
8 голосов
/ 07 октября 2010

Я работаю над кодом, который не написал и заметил, что их много extern void my_func();.

Насколько я понимаю, extern для глобальных переменных, а не для функций.

Есть ли практическая причина объявить функцию как extern, а не помещать ее в файл заголовка и включать ее?Или это просто стилистический выбор?

Ответы [ 3 ]

10 голосов
/ 07 октября 2010

Это необходимо только в том случае, если по какой-то причине заголовочный файл не объявляет функцию. И extern всегда не нужен для функций, так как функции всегда extern по умолчанию.

0 голосов
/ 12 ноября 2012

Разве не достаточно объявить прототип в вашем файле * .c перед использованием функции вместо того, чтобы включать весь заголовочный файл?Нет необходимости использовать extern в любом случае для функций.Я еще не пробовал, но это должно работать так.

0 голосов
/ 07 октября 2010

Одно использование функций extern предполагает, что у вас есть два модуля: module_a (реализован в файлах module_a.h и module_a.c), module_b (реализован в файлах module_b.h и module_b.c). Теперь вы хотите, чтобы определенная функция module_b использовалась в module_a. Но вы не хотите раскрывать всю функциональность module_b в module_a. В этом случае вместо #include "module_b.h" вы можете extern только требуемый прототип функции.

...