> Note that C does not have a boolean type
`_Bool` and `long long` are both introduced in C99, this is mixed up info.
Edit: probably tailor-made for old MSVC, which didn't support _Bool until VS2013.
> Note that C does not have a boolean type
`_Bool` and `long long` are both introduced in C99, this is mixed up info.
Edit: probably tailor-made for old MSVC, which didn't support _Bool until VS2013.
When somebody says "This program is written in C", my initial thought is "Which C?". There is no one, single C.
I don't write C daily. Heck, I don't write it monthly any more. And so my grey cells are struggling with which versions introduced what, and you've spotted something I would have missed on a first read.
And this is a problem.
Can you list all the undefined behaviours, and which language features came into which version across ANSI, C99, C11, C17 and C23? The last one feels a little brighter in my mind, but I definitely can't, and if I was writing a C tutorial - like many that have been written - I'd probably be explicit about choosing a version and sticking with it, and good luck and godspeed to everything outside that version.
Of course this is one of the reasons learning C is harder than other languages, and why languages like Zig and Odin have a decent chance: ergonomically simpler than Rust, all the power and flexibility, (much) less of the head scratching.
I think the jury is out on Zig and Odin (but I like Zig a lot, in particular), but I feel Rust has hit a tipping point - like Go, Python and Java - where there's too much production code out there for it to disappear in the next ten years.
If you were to ask me about languages where that might not be the case in ten years, I'd point to where usage is not very production oriented (R, Julia), or where people have had a good try and decided they want to pull back investment (anecdotally, Ruby and Scala seem to be on that curve right now).
Though I suspect it’s fair to say the entire settlement is built of glass houses here :-)
https://news.ycombinator.com/item?id=43798312
I suppose if one wants absolutely no surprises, they will need to lock the entire toolchain as well, regardless of the language…
Modern languages - even those that have high levels of C interop like Zig - can (and do) avoid those problems.
I do agree that some of the UB is a problem though.
Things are a lot better today than they used to be though: compilers that don't support modern features are rarer, and the compilers give much better errors on things like UD.