简体   繁体   中英

How is a header only ANSI C library possible?

There is a very popular library named nuklear that is both written in ANSI C and entirely header only. However, there can only be one definition of functions in each translation unit, and ANSI C does not have inline functions, so how does this library work properly without linker errors?

Starting at line 73 is a description on how to use this header:

/// ## Usage
/// This library is self contained in one single header file and can be used either
/// in header only mode or in implementation mode. The header only mode is used
/// by default when included and allows including this header in other headers
/// and does not contain the actual implementation. <br /><br />
///
/// The implementation mode requires to define  the preprocessor macro
/// NK_IMPLEMENTATION in *one* .c/.cpp file before #includeing this file, e.g.:
///
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~C
///     #define NK_IMPLEMENTATION
///     #include "nuklear.h"
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So normally including this header file will only give you the declarations. If you #define NK_IMPLEMENTATION before including, then the implementation is included.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM