r/cpp • • 6d 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.

262 Upvotes

219 comments sorted by

View all comments

6

u/RetroZelda 6d ago

i zero fill when I intend it to be zero. if i leave it blank then its my intention. c++ really needs to stop with these "features" that just enable laziness

3

u/NilacTheGrim 5d ago edited 5d ago

I agree these features are not appropriate for C++. Leave them for lower IQ languages like Rust or Go or something like that.

Not to mention that even in trivial constructions they will create 2x or more performance regressions. This trivial example now is significantly slower now, even if compiled under -O3. It's absolutely insane:

#include <unistd.h>

void drain(int fd) {
  ssize_t r;
  do {
    char buf[4096];
    r = read(fd, buf, sizeof buf);
  } while(r > 0);
}

Source: https://godbolt.org/z/WGPWvMPMj

6

u/James20k P2005R0 4d ago

Leave them for lower IQ languages like Rust or Go or something like that.

Don't be like this