The printf function will look for an argument on the stack, even if you do not add it. All that will be used there if it cannot find an integer argument. In most cases, you will get meaningless data. The selected data varies depending on your compiler settings. On some compilers, you can get 16 as a result.
For instance:
int printf(char*, int d){...}
This is how printf will work (not really, just an example). It does not return an error if d is empty or empty, it just looks at the stack for the argument that should be displayed there.
source share