您好,登錄后才能下訂單哦!
儲存類:變量在定義時的儲存類型對其在程序中的生命周期、連接屬性及作用域有很大的關聯
鏈接屬性: 無連接、內連接、外鏈接
關鍵字:
1、auto 用于修飾局部變量,在定義局部變量時,將其定義在棧上。
普通局部變量存放在棧上,因為棧內存的特性決定了普通局部變量定時如果未初始化其的值是隨機的,因為棧內存是臟的,變量在釋放后并未對其初始化,且棧內存被廣泛運用,也就造就了普通變量的特性。
普通局部變量的生命周期是臨時,可從其存放于棧上看出其臨時的特性。
普通局部變量的作用域為代碼塊中“{}",C89與C99略有不同,普通局部變量在代碼塊的首部被定義,在代碼塊中被運用,在代碼塊結尾處被釋放。
2、static 該關鍵字有兩種作用,1、用于修飾靜態局部變量 2、用于修飾全局變量或者函數,
且這兩種作用之間無任何的相關性,相互獨立的存在。
static修飾的局部變量為靜態局部變量,其與普通局部變量不同,并不存放在棧上,而是存放在數據段/bss段(顯式初始化為非0則在數據段,顯式初始化為0或未顯示初始化則在bss段)上,同樣的因其存放在數據段上也就決定了其的生命周期并不是臨時的而是永久的。但靜態局部變量與普通局部變量也存在相似性,靜態局部變量的作用域仍為代碼塊,且其連接屬性依舊為無連接。
static修飾的全部變量/函數為靜態全局變量/函數,其作用域的文件范圍,生命周期為永久,連接屬性因其只能在自身的文件內部被調用所以連接屬性為內連接。
3、register 該關鍵字修飾的變量分配于寄存器中,降存放于寄存器中的變量可大大提高讀取速度,但寄存器是有限的,
且經常性的被系統本身使用,故謹慎使用該關鍵字。
4、extern 該關鍵字用來全局聲明變量/函數,聲明后的全局變量及函數可在別的文件中被調用(前提是包含了該文件的.h文件),
作用域變更為全文件,鏈接屬性為外鏈接。
5、volatile 其意思為可變的,在C語言中定義變量時加上該關鍵字,即可告訴編譯器該變量可被編譯器以外的代碼改變,編譯器之內的意思是變量的值的改變是代碼的作用,編譯器之外的改變就是這個改變不是代碼造成的,或者不是當前代碼造成的,編譯器在編譯當前代碼時無法預知。譬如在中斷中對變量的操作就必須加上該關鍵字,防止編譯器對代碼進行了錯誤的優化。
6、restrict restrict只用來修飾指針,不能修飾普通變量。
7、typedef
存儲類決定生命周期,作用域決定鏈接屬性
宏和inline函數的鏈接屬性為無連接。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。