In C: The Complete Reference, Herbert Schildt says that
Headers are usually files, but they are not necessarily files. It is permissible for a compiler to predefine the contents of a header internaly. However for all practical purposes, the standard c headers are contained in files that correspond to their names.
How can a header exist without being a file? What's the theme of this passage? Because the .h file extension is used with a header.