Any function prototypes, and type definitions that can be exported from a source code file are put in a header file. From the point of view of the main application, these functions are external.
The compiler reads the included header file and knows where a particular function comes from. Without this it would just report an undefined function error.
When the application is linked, all calls to external functions are resolved.

