fork download
  1. #include <stdio.h>
  2.  
  3. void Hoge()
  4. {
  5. static int init = 0;
  6. static int hoge;
  7. int huge;
  8.  
  9. if (init == 0) {
  10. hoge = 1; // 静的変数はプログラム開始から終了まで領域を確保し続ける
  11. huge = 2; // 自動変数はスコープ内(この場合は関数内)のみ領域を確保
  12. init = 1; // この関数が2度目以降に呼ばれたときhogeは1のままだがhugeは不定
  13. }
  14. printf("Hoge:hoge 静的変数 %#p %d\n", &hoge, hoge);
  15. printf("Hoge:huge 自動変数 %#p %d\n", &huge, huge);
  16. }
  17.  
  18. void Hage()
  19. {
  20. static int init = 0;
  21. static int hoge;
  22. int huge;
  23.  
  24. if (init == 0) {
  25. hoge = 11;
  26. huge = 12;
  27. init = 1;
  28. }
  29. printf("Hage:hoge 静的変数 %#p %d\n", &hoge, hoge);
  30. printf("Hage:huge 自動変数 %#p %d\n", &huge, huge);
  31. }
  32.  
  33. int main()
  34. {
  35. Hoge();
  36. Hage();
  37. Hoge();
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0.01s 1720KB
stdin
Standard input is empty
stdout
Hoge:hoge 静的変数 0x804a024 1
Hoge:huge 自動変数 0xbfcb5888 2
Hage:hoge 静的変数 0x804a01c 11
Hage:huge 自動変数 0xbfcb5888 12
Hoge:hoge 静的変数 0x804a024 1
Hoge:huge 自動変数 0xbfcb5888 12