The C23 edition of Modern C

C vs C++ and “mixing”

  • Many agree with the book’s reminder that C and C++ are distinct and shouldn’t be mentally conflated.
  • Others note that in practice they are often mixed: C++ code calling C libraries (e.g., sqlite, ffmpeg), embedded codebases with “C with a C++ compiler,” and C headers wrapped in extern "C".
  • There’s debate over whether compiling C with a C++ compiler is acceptable practice vs. a maintenance trap.
  • Several comments stress subtle incompatibilities between “real C” and the C subset of C++, and that writing C that is also valid C++ often means reverting to an older, less safe C style.

C23 / “Modern C” features and philosophy

  • Some welcome C23 additions (e.g., constexpr, nullptr, _BitInt, attributes, thread_local), seeing them as pulling in proven C++ ideas and making C libraries easier to use from C++.
  • Others feel C23 adds complexity, “C++-smelling” features, and tool divergence (e.g., auto semantics differ between GCC and Clang), eroding C’s appeal as the simple, stable systems language.
  • There is concern about spec changes that are not yet widely implemented, vs. the committee’s traditionally conservative stance.

Adoption, toolchains, and portability

  • Several note that C is effectively “frozen at C99” in much real-world code, especially embedded and legacy systems.
  • Microsoft’s long delay and partial support for C99/C11 is blamed for slowing C’s evolution.
  • Some argue C23 will take a decade or more to become commonplace in embedded toolchains; others counter that GCC/Clang-based ecosystems can already use it.

Safety, UB, and comparisons with Rust/Zig/D

  • Consensus that C remains much less safe than Rust or Zig; C’s undefined behavior and array-to-pointer decay are recurring concerns.
  • Some argue “UB doesn’t automatically mean unsafe” if implementations choose safe defaults; others respond that the standard explicitly allows dangerous behavior.
  • Examples from D (slices with bounds checking) are contrasted with C’s ease of out-of-bounds access; a proposed C fix is seen as syntactically clumsy.
  • Thread participants disagree on whether discipline plus tools can make C “safe enough,” or whether continuing to use C for new work is irresponsible.

Strings, containers, and I/O

  • C still relies on null-terminated char* strings and provides no standard containers; list usage is entirely library- or project-specific.
  • I/O streams in C++ are heavily debated; some see them as a historical misstep now superseded by std::format/std::print, others defend them as a major improvement over printf.

Book reception and ergonomics

  • “Modern C” is widely praised for rigor and structure but described as dense and “spec-like”; some prefer more engaging alternatives for learning.
  • PDF table-of-contents links are reported broken in several viewers.
  • Some find pervasive attributes in examples visually noisy and off-putting.