The C hacker handbook ===================== A personal handbook. Things to keep in mind when writing in C. C Language conventions: ----------------------- * Assertions are disabled by -DNDEBUG Some interesting Linker flags: ------------------------------ --wrap=symbol Can be used to supply custom implementations of well known symbols. Possible use: mocking in unit tests, special wrappers, ... CMake: ------ * Supply CFLAGS with -D CMAKE_C_FLAGS=... * Dependency handling via pkg-config: pkg_check_modules(FOO REQUIRED IMPORTED_TARGET libfoo) target_link_libraries(PkgConfig::FOO). Supported since CMake 3.6. Build reproducibility --------------------- * Ensure file system path are not baked in the binaries. Use of __FILE__ can be the culprit, as well as assert() Hint: disassembling might help in finding the cause for it. Dynamic libraries ----------------- * Reduce the exported symbol to a minimum -fvisibility=hidden __attribute__ ((visibility ("default"))) Error handling -------------- * Enforce handling using __attribute__ ((warn_unused_result)) * Strategy: int function(...) returns errcode. negative errcode -> propagates -errno positive errcode -> check against enum errcode zero -> success.