On 2017-01-18 10:28, Luis Machado wrote:
That is perfectly fine. The cryptic bit i was referring to was
declaring/initializing a static variable inside this particular
Indeed, and I pointed to Pedro's patch because it removes that. The
global object is statically allocated and is constructed at startup, so
there's no more checking if it's initialized nor static variable inside
It ought to be possible to initialize the static variable somewhere
else and only do the null check/allocation in the function? Compilers
will often zero these out too, so initializing to NULL may not even be
I think this is a common pattern when you want to have a singleton with
lazy initialization, but I agree that it can be confusing. The
variables with static storage duration are put in .bss (since they are
not in .data), so yes they'd be initialized to 0 automatically, I
believe. I prefer to see the = NULL though.
Of course we could move the variable outside the scope of the function,
but then it would be possible to reference it from other functions. The
goal of declaring it in the function is that the only way to reach it is
by calling the function it's in.
The fact that the initialization only happens once but the source line
is there forever can cause some confusion.
Well, you can thank Mr Ritchie & friends I suppose :).