extern and the XC8 C compiler
extern is not strictly necessary for function prototypes in .h files - whether or not the function is actually used in one or many different .c files in your project.
Whether you have extern int foo(void);   or just   int foo(void);   in your .h your compiler will read is as a function prototype either way.

Its necessary for global variables though since unlike functions they don't have prototypes.
So if you have an  int thing;  in one .c file and you want to use it in another .c file then you'll need an  extern int thing;  to tell the compiler that it does exist 'somewhere' in your project.