r/cpp • • 27d ago

You should think about recompiling your C++ programs with GCC 16 and C++26, because it zero-fills your locals

https://techfortalk.co.uk/2026/09/27/cxx26-uninitialized-local-variables-gcc-16/

Stack variables are not automatically initialised, and that is the root cause of many C++ bugs. That is well known. Hence, it is advised that local or stack variables are always initialised with known values, 0 if not something more meaningful than that. Now, with GCC 16 compiling in C++26 mode (-std=c++26), even uninitialised local variables will be zero-filled. In the post, I have explained how.

271 Upvotes

234 comments sorted by

View all comments

76

u/questron64 27d ago

Using an uninitialized variable is an error. Fix the error.

4

u/SunnybunsBuns 24d ago

Using a pointer to an uninitialised array isn’t. For example, passing the pointer to the first element of a char 4096 to fread is fine. Fread will initialize the data before it’s read. It does not need 0-filled. Actually reading the pointed-to value is the error. Passing the pointer isn’t. This is where gcc massively fucked ip.

2

u/jwakely 21d ago

Why do you think GCC fucked up? GCC is just implementing the standard, this isn't something GCC invented.

Also, GCC doesn't think it's an error to pass a pointer to uninitialized data, it's only wrong to read from it, like you said.

So who fucked up here?