Originally Posted by
Nominal Animal
You also avoid name space pollution.
Consider, for example, a project where you have several .c files that have a helper function named process() they use internally. If they are not declared as static, it will create a link time conflict; the linker won't know (but will probably try to guess, with varying results) which process() is being called where. (The header files are not examined at link time, so it does not matter whether the functions are declared in the header file or not; only whether they're static/local or not.)
This is also why most C libraries name their public functions library_function().