Inline is the keyword here (litterally). Inline, in C++, is defined as disabling the requirement of having exactly one definition of a function (it is also a weak hint for the compiler to perform inlining).
Template functions are implicitly inline.
Inline in C has a similar but subtly different definition.
It's called a header for a reason, unless we are now redefining the meaning and intent of headers, so that people could stick C++ template code in them?
Oh, where is the officially sanctioned definition of the meaning and intent of a header?
So glad you asked: The C Programming language, 2nd edition, page 82, chapter "FUNCTIONS AND PROGRAM STRUCTURE", as follows:
"There is one more thing to worry about--the definitions and declarations shared among the files. As much as possible, we want to centralize this, so that there is only one copy to get right and keep right as the program evolves.
Accordingly, we will place this common material in a header file, calc.h, which will be included as necessary."
(Templates get de-duplicated).