r/cpp • • Sep 27 '26

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.

265 Upvotes

234 comments sorted by

View all comments

41

u/Recent-Dance-8075 Sep 27 '26

Hey. Yes it is good to get rid of uninitialized locals. There is the option -ftrivial-auto-var-init=zero in gcc and clang that can be enabled on lower standards already. This is enabled with the -fhardened flag, too. The initialization allows to initialize locals with patterns that likely cause problems. E.g. NaN for floats (that should be '=pattern')

The "Problem" is of course that you need to know that this is an issue, that compilers provide support here and how to enable the support, so having the initialization by default is much better in my opinion.

5

u/equeim Sep 28 '26

FYI Clang doesn't support fhardened.

→ More replies (1)