Consider a source file containing `#include "toto.h"` and a declaration such as `toto* toto_init(toto*);`. After preprocessing, that source file and its included material form one translation unit: the unit presented to the compiler. A function definition is visible for inlining only when the caller and definition occur in the same translation unit. section 15.1
Header definition and one instantiation
An inline definition can live in a header, while a matching non-defining declaration is instantiated in exactly one translation unit. This arrangement makes the definition available where needed without treating every inclusion as another definition.
TAKEAWAY: A translation unit is a compiler-facing boundary created from one preprocessed C source file and its included material. It affects what definitions the compiler can see together, enabling inlining and further optimization when caller and callee share that boundary. section 15.1

