Public headers must be wrapped with `extern "C"` so they can be used
by C++ programs.