Re:Show HN: A 2D game engine in under 1000 lines of C
by flukus on Sunday February 02, 2020 @10:20PM
(#22221164)
The question should probably be what you gain from the header files? If you just want the simplicity you can "#include \"some_file.c\"" instead. Functionally it's no different, but it's less surprising to other people and it's an easier transition to a real build system if/when you need it. I think the reason it's being raised is because people think your writing a header only library.
Re:Show HN: A 2D game engine in under 1000 lines of C
by ryanpcmcquen on Monday February 03, 2020 @02:08AM
(#22222062)
In my experience, including `"some_file.h"` is more common than `"some_file.c"`. I also like knowing at a quick glance what the entry point/main file is. That's less explicit when all the files have the same extension.
Re:Show HN: A 2D game engine in under 1000 lines of C
by jdmoreira on Sunday February 02, 2020 @03:02AM
(#22215802)
You can read some of the criticisms here
https://en.m.wikipedia.org/wiki/Header-only
Re:Show HN: A 2D game engine in under 1000 lines of C
by macleginn on Sunday February 02, 2020 @08:50AM
(#22216887)
None of them seem relevant for a small-scale unitary project.
Re:Show HN: A 2D game engine in under 1000 lines of C
by chongli on Sunday February 02, 2020 @09:36AM
(#22217079)
Even a large project like SQLite is provided as a single, unified header file!
Re:Show HN: A 2D game engine in under 1000 lines of C
by flohofwoe on Sunday February 02, 2020 @08:55AM
(#22216905)
A better resource is this:
https://github.com/nothings/stb/blob/master/docs/stb_howto.t...
There's an important difference between C++ style header-only libs, where the implementation is often done in inline code (especially for template-heavy APIs) and thus visible in each compilation unit (which is indeed bad for compile times), and "STB-style single-file libs", where the implementation is only visible in a single compilation unit.
The difference between a single .h file and a .h/.c pair is really just different packaging for distribution and integration into projects.
The headers are library code, and having more files just means more maintenance and build complexity. Is there another advantage I am not aware of?