C語言register變量和extern及static等知識總結
一、register變量
關鍵字regiter請求編譯器盡可能的將變量存在CPU的寄存器中。有以下幾點注意的地方。
register變量必須是能被CPU寄存器所接受的類型,這通常意味著register變量必須是一個單個的值,并且其長度應小于或等于整型的長度。但是,有些機器的寄存器也能存放浮點數。
register變量可能不存放在內存中,所以不能用取址符運算符“ & ”。
只有局部變量和形參可以作為register變量,全局變量不行。
靜態變量不能定義為register。
二、static
修飾變量(局部和全局變量)
靜態全局變量:
在全局數據區分配內存;未經初始化的靜態全局變量會被程序自動初始化為0(自動變量的值是隨機的,除非它被顯式初始化)作用域僅限于變量被定義的文件中。
全局變量和全局靜態變量的區別:
(1)全局變量是不顯式用static修飾的全局變量,但全局變量 默認是靜態的,作用域是整個工程,在一個文件內定義的全局變量,在另一個文件中, 通過extern 全局變量名的聲明,就可以使用全局變量。
(2)全局靜態變量是顯式用static修飾的全局變量,作用域是所在的文件,其他的文件即使用extern聲明也不能使用。
靜態局部變量
靜態函數
在函數的返回類型前加上static關鍵字,函數即被定義為靜態函數。靜態函數與普通函數不同,它只能在聲明它的文件當中可見,不能被其它文件使用。其它文件中可以定義相同名字的函數,不會發生沖突。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%