Convention states that these files have a .h suffix. Header files usually ONLY contain definitions of data types, function prototypes and C preprocessor commands. Up to some moderate program size it is probably best to one or two header files that share more than one modules definitions. There is still the problem of sharing variables. If we have global variables declared and instantiated in one module how can it pass its knowlege of this to other modules.
External variables are always permanent.
ONLY fn can see alone. This is also the one of the reasons why we should prototype functions before the body of code etc. is given. The other reason we prototype functions is that some checking can be done the parameters passed to functions. If we need to refer to an external variable before it is declared or if it is defined in another module we must declare it as an extern variable. Where a function is spread over several files, each file will contain one or more functions.