2011年4月23日 星期六

static variables/functions in C/C++

面試工作時常常被問到這樣子的問題
static變數/函式在C/C++的意義

先從C說起
倘若static出現在global function/variable的前頭
代表著是這個function/variable的scope只限於當下定義的檔案中
也就是說雖然是global function/variable
在compile的過程中別的檔案裡的code即使用extern的方式宣告想要使用它
也是不行的

另外比較常見的function內宣告的static variable
function內的static variable較local variable有永久存在的特性
一般而言local variable存在於stack中
隨著function call而起 隨著return而終
但是static variable則是存於data segment的BSS中 (Data Segment@wiki)
擁有完整的程式執行生命周期


再來就是C++的部份
如果跟class無關的static 就跟C一樣的
但是如果是出現在class中 就比較特別了
static member variable蠻像C裡頭function內的static variable
是該class的每個objects可以共享的資訊
static member function則是可以用來修改static member variable的function
在static member function裡不可以用this來access object-dependent information.

大概就是這樣.

沒有留言:

張貼留言