《Windows程序設計》第88頁有一個API函數調用(另外,對這頁的程序——“加入滾動條的SYSMETS”,這個鏈接給出了很好的注釋和運行截圖,值得一看:http://blog.csdn.net/sergery/article/details/8029796 ):
SetScrollPos (hwnd, SB_VERT, iVscrollPos, TRUE) ;
其中,iVscrollPos是窗口過程WndProc中定義的一個static變量,沒有給初始值,使用的是默認初始化規則,於是就將相關規則找出來復習一下,摘要如下:
1.static 局部對象確保不遲於在程序執行流程第一次經過該對象的定義語句時進行初始化。這種對象一旦被創建,在程序結束前都不會撤銷(下面的第2條對這句話給出了更好的解釋)。 ——《C++ Primer》345頁
2.為靜態局部變量賦初值是在編譯時進行的,即只賦初值一次,在程序運行時它已有初值。以後每次調用函數時不再重新賦初值而只是保留上次函數調用結束時的值。而為自動變量賦初值,不是在編譯時進行的,而是在函數調用時進行,每調用函數重新給一次值,相對於執行一次賦值語句。
3.如果在定義局部變量是不不賦初值的話,對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符型變量)。而對自動變量來說,如果不賦初值,則它的值是不確定的值。這是由於每次函數調用結束後存儲單元已被釋放,下次調用時又重新分配存儲單元,而所分配的單元中的值是不確定的。 ——《C++程序設計》(譚浩強第四版)141頁,該頁還有其它相關規則。