this post was submitted on 29 Jul 2026
22 points (100.0% liked)

C Programming Language

1326 readers
2 users here now

Welcome to the C community!

C is quirky, flawed, and an enormous success.
... When I read commentary about suggestions for where C should go, I often think back and give thanks that it wasn't developed under the advice of a worldwide crowd.
... The only way to learn a new programming language is by writing programs in it.

ยฉ Dennis Ritchie

๐ŸŒ https://en.cppreference.com/w/c

founded 3 years ago
MODERATORS
 

I have watched some developers giving advice about using C for general software development, i noticed that a not insignificant amount of them are strictly using C89, vaguely gesturing that more recent versions of C are less dependable, or more broken.

I would appreciate if anyone here can explain the specifics, as me not being a C developer (yet) and looking over the source code of some libraries which do heavily use modern C features, for example to have a defer-like macro (using attributes, or the 2 for statement trick), or generic data structures (using manual name mangling).

I understand these examples are strictly not how C is usually used, and are common in other more modern languages, which may turn some developers away from using these, my main question is "why exactly?".

I don't mind being given further reading about this, so if you have an article in mind, it too would be greatly appreciated.

note: in the title i referred to C23, but it could be anything post C89/C99 depending on the subject matter.

you are viewing a single comment's thread
view the rest of the comments
[โ€“] boob_warbler@fedinsfw.app 1 points 2 days ago (2 children)

At least since C99, I've seen a trend where ISO tends to bring in unnecessary C++ features in. In fact, the current boss of WG14 quite explicitly calls for bridging gaps, modernising capabilities, and bringing select features (like constexpr object definitions and ergonomics) closer to what developers enjoy in C++, while "balancing C's unique philosophy and design constraints". I don't suppose it sat well with most C developers who feel C++ has evolved into a language of its own and that we shouldn't try to bridge gaps that don't exist. And consequently, the very fear of "dead on arrival" features have already crept in. Off the top of my mind, VLA is one such example. Appeared in C99 and is now a deprecated feature.

That said, C89 is, for most parts enough to express that largest chunk of your codebase. But sure, you might need a little bit of size guaranteed integers, so you could borrow that from C99. What're you left with? The convenience of declaring variables midway? That's about as far as it goes. In very rare circumstances you might want to statically assert macros is global variables. Sure, pick C11 just for that task.

If I really need some awesome syntax sugars, I'd rather use one of those modern languages like Zig, Rust and what nots..

[โ€“] HubertManne@piefed.social 1 points 2 days ago

I can see this. Im not a dev but when scripting I often would mention I like to make something simple shell script if I did not need anything more because it would run fine on pretty much any system. I only went to a higher level shells when I need capabilities that simple shell did not have.

I can see that, personally i dislike using C++, as it has so many different ways to solve the same problem, confining a project to use a specific subset of C++ is very difficult.

Though mostly what i would like to be closer to other languages, is what is mostly standard across everything, like tuples, so i wouldn't have to do:

Err fallible(Arg argument, Out* output) { ... }

But at least attributes allow me to warn if the error in this case is unused.

Thing is, C can compile to anything, so i wonder if Zig/Rust can really be a drop in replacement in most use cases.