38.15.1.1. Userland objects vs header-only

When factoring out functionality across userland examples, there are two main options:

  • use header-only implementations

  • use separate C files and link to separate objects.

The downsides of the header-only implementation are:

  • slower compilation time, especially for C++

  • cannot call C implementations from assembly files

The advantages of header-only implementations are:

  • easier to use, just #include and you are done, no need to modify build metadata.

As a result, we are currently using the following rule:

  • if something is only going to be used from C and not assembly, define it in a header which is easier to use

    The slower compilation should be OK as long as split functionality amongst different headers and only include the required ones.

    Also we don’t have a choice in the case of C++ template, which must stay in headers.

  • if the functionality will be called from assembly, then we don’t have a choice, and must add it to a separate source file and link against it.