Convention states that these files have a .h suffix. Some, like main.c , also include standard header files also. The function prototype void for WriteMyString is defined in Header.h NOTE that in general we must resolve a tradeoff between having a desire for each .c module to have access to the information it needs solely for its job and the practical reality of maintaining lots of header files. Up to some moderate program size it is probably best to one or two header files that share more than one modules definitions. If we have global variables declared and instantiated in one module how can pass knowledge of this to other modules.
External variables are always permanent.
That in C, all function definitions are external. 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.