int i;
printf("%d",i);
If you execute above code, you will get some junk value as output. It means memory was allocated to i. Hence it is definition. But, many book refers its declaration as the value is explicitly not assigned to i. So, is this declaration or definition? Or depending upon compiler implementation it is declaration if memory is not allocated.