Michael Walz Michael Walz - 4 months ago 14
C Question

Is using the address of an uninitialized variable UB?

Is this small code UB?

void Test()
int bar;
printf("%p", &bar);

IMO it's not UB, but I'd like some other opinions.

It simply prints the address of
, even if
has never been initialized.


TL:DR No, your code does not invoke UB by using anything unini tialized, as you might have thought.

The address of a(ny) variable (automatic, in this case) has a defined value, so irrespective of whether the variable itself is initialized or not, the address of the variable is a defined value. You can make use of that value. ( if you're not dealing with pointers and doing double-dereference. :) )

That said, strictly speaking, you should write

 printf("%p", (void *)&bar);

as %p expects an argument of type pointer to void and printf() being a variadic function, no promotion (conversion) is performed. Otherwise, this is a well-defined behavior.

C11, chapter ยง7.21.6.1

p The argument shall be a pointer to void. [.....]