[問題] 函數內靜態變數的初始化順序

看板C_and_CPP (C/C++)作者 (Fan)時間14年前 (2012/05/25 22:46), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串1/1
最近在學c,有一個範例程式,是在介紹宣告變數的各種等級 程式如下: #include <stdio.h> void varfunction() { int var = 0; static int static_var = 0; printf("var = %d \n",var); printf("static static_var = %d \n",static_var); var++; static_var++; } int main() { int i; for ( i = 0; i < 3; i++ ) varfunction(); return 0; } 顯示結果為: var = 0 static_var=0 var = 0 static_var=1 var = 0 static_var=2 他主要是想介紹static的變數宣告並不會隨著函數的結束 而導致資料的消失,可是我有個問題,在副函數的部分 有這麼一行 static int static_var = 0; 那不是三次進副函數都會把stasic_var歸零嗎? 為何還能印出0,1,2 敢請指教@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.1.29

05/25 22:48, , 1F
那個static的初始化只會在程式的一開始執行
05/25 22:48, 1F

05/25 22:51, , 2F
喔喔 請問是所有副函式的宣告部分都只會執行一次嗎?
05/25 22:51, 2F

05/25 22:56, , 3F
function中的static變數都只會在程式開始時初始化
05/25 22:56, 3F

05/25 22:58, , 4F
以上是C, 如果是C++的話則是在第一次執行函式的時候才
05/25 22:58, 4F

05/25 22:58, , 5F
初始化 大概是這樣
05/25 22:58, 5F

05/25 23:11, , 6F
嗯嗯 感謝樓上
05/25 23:11, 6F

05/26 09:44, , 7F
C的static變數不是在compile time就初始化在obj裡了 (?
05/26 09:44, 7F
文章代碼(AID): #1FlvipAm (C_and_CPP)
文章代碼(AID): #1FlvipAm (C_and_CPP)