Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

it is not. very simple example:

    char* bytes = malloc(4);
is valid C89 but not valid C++. You have to restrict yourself to a kind-of subset of C89 if you want it to work with C++.


It's true that C is not a subset of C++, but in reality such implementation details don't matter much as long as the library API is both C and C++ compatible. Compiling a C source file in a C++ project is as simple as using a ".c" file extension, build systems will then compile the file in "C mode" instead of "C++ mode".


This is a header-only library, so the code must be compiled in “C++ mode” to be used in C++ projects, requiring the C++/C89 subset in this case.


It's an STB-style single-file library, which means the implementation is in a separate ifdef-block from the interface declarations, this allows to compile the implementation in a different source file (which can be a C file) from the source files which use the library (which can be C++ files).

Here's for example such an "implementation source file" example (using stb_image.h):

https://github.com/floooh/sokol-samples/blob/master/libs/stb...

...or for a whole collection of related single-file libraries:

https://github.com/floooh/sokol-samples/blob/master/libs/sok...


Yes, my mistake. I assumed they retained some code in header mode intended for inlining but that was not correct.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: