This article needs additional citations for verification. (January 2019) |
In the context of the C or C++ programming languages, a library is called header-only if the full definitions of all macros, functions and classes comprising the library are visible to the compiler in a header file form.[1] Header-only libraries do not need to be separately compiled, packaged and installed in order to be used. All that is required is to point the compiler at the ___location of the headers, and then #include the header files into the application source. Another advantage is that the compiler's optimizer can do a much better job when all the library's source code is available.
The disadvantages include:
- brittleness – most changes to the library will require recompilation of all compilation units using that library,
- longer compilation times – the compilation unit must see the implementation of all components in the included files, rather than just their interfaces,
- machine-code bloat (arguably) – the necessary use of inline statements in non-class functions can lead to code bloat by over-inlining,
- harder to understand as the header contains both the interface and the implementation whereas traditional library separate both.
Nonetheless, the header-only form is popular because it avoids the (often much more serious) problem of packaging.
For C++ templates, including the definitions in header is the only way to compile, since the compiler needs to know the full definition of the templates in order to instantiate.
References
edit- ^ Wilson, Matthew (2004). Imperfect C++. Addison-Wesley. p. 177. ISBN 0-321-22877-4.