extern на прототипах функций?

my_math.h

// case 1 unsigned int add_two_numbers(unsigned char a, unsigned char b); //case 2 extern unsigned int add_two_numbers(unsigned char a, unsigned char b); 

В чем разница между случаем 1 и случаем 2? Я никогда не использовал extern для прототипов функций, но смотрел на чей-то код (кто более опытен, чем я). Я вижу, что extern всегда используется при объявлении прототипа функции. Может ли кто-нибудь указать, пожалуйста, укажите разницу? (или указать мне ссылку, где я могу найти конкретную информацию). Google говорит, что это связано с внешней связью. Может ли кто-нибудь указать мне пример, где можно было бы работать, а другой – нет?

Я использую встроенный C (KEIL), если это имеет значение.

extern – спецификатор привязки для глобальной привязки. Его аналог является static , в котором указывается файловая локальная связь. Поскольку глобальная связь является значением по умолчанию в C, добавление extern к объявлению не имеет никакого значения для объявления функции . Для переменной она предотвращает автоматическое выделение памяти, и использование этого метода является единственным способом просто объявить переменную в глобальной области.

Если вы просто указали ключевое слово Google, вы найдете много статей, например, этого: geeks для geeks

Я узнал следующее за перемены лет назад от опытного программиста:

 glo.h: #ifndef EXTERN #define EXTERN extern #endif ... EXTERN int gMyVar; ... main.c: #define EXTERN #include "glo.h" 

«glo.h» где угодно, просто объявит все глобальные переменные. «glo.h», включенный в main.c, будет выделять хранилище для переменных. Я считаю, что этот метод был обычной практикой.

Для (не inline ) функции это не имеет никакого значения, extern неявно, если не указан спецификатор classа хранения (обратите внимание, что это относится только к функциям, объекты разные), так что это только вопрос стиля что вы используете.

Я видел оба (никогда не использовать extern для функций / использовать его только для объявлений в заголовке), возможно, некоторые используют extern для симметрии с идентификаторами объектов или для облегчения grep для внешних символов.

Выберите то, что вы предпочитаете, и оставайтесь последовательным, это не имеет значения.