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);
What is the difference between case 1 and case 2? I never used extern for function prototypes but looking at someone's code (who is way more experienced than I am) I see extern always used when declaring the function prototype. Can anyone point please point the difference? (or point me to a link where I can find specific information). Google says that is something related to the external linkage. Can anyone point me to an example where one would work and the other wouldn't?
I am using embedded C (KEIL), if it makes any difference.
extern
is a linkage specifier for global linkage. Its counterpart isstatic
, which specifies file-local linkage. Since global linkage is the default in C, addingextern
to the declaration makes no difference for the declaration of a function. For a variable it prevents automatic memory allocation and using it is the only way to just declare a variable at global scope.If you just google the keyword, you will find many articles e.g. this one: geeks for geeks