I have some doubt in this simple program.
  void hello()
  {
      int a;
      printf("uninitialized in hello: %d\n",a);
  }
  int main()
  {
      int value;
      printf("uninitialized in main: %d\n",value);
      hello();
      return 0;
  }
If i am compile and run this program.
  user@toad:~$ gcc -Wall simple.c
  simple.c: In function ‘hello’:
  simple.c:6:3: warning: ‘a’ is used uninitialized in this function [-Wuninitialized]
       printf("uninitialized in hello: %d\n",a);
       ^
  simple.c: In function ‘main’:
  simple.c:12:11: warning: ‘value’ is used uninitialized in this function [-Wuninitialized]
       printf("uninitialized in main: %d\n",value);
       ^
  user@toad:~$ ./a.out 
  uninitialized in main: 0
  uninitialized in hello: 32672
  user@toad:~$ ./a.out 
  uninitialized in main: 0
  uninitialized in hello: 32679
  user@toad:~$ ./a.out 
  uninitialized in main: 0
  uninitialized in hello: 32599
  user@toad:~$ ./a.out 
  uninitialized in main: 0
  uninitialized in hello: 32560
  user@toad:~$ ./a.out 
  uninitialized in main: 0
  uninitialized in hello: 32585
Why main() function prints
uninitialized in main: 0
but hello() function prints
uninitialized in hello: [some garbage value.]
Is it is undefined behaviour?
 
    