您好,登錄后才能下訂單哦!
1、static
這個關鍵字有三種用法:
(1)第一種是用來修飾局部變量,使之成為靜態局部變量;靜態局部變量存儲在數據段/bss段中,作用域是代碼塊作用域,生命周期是程序生命周期,鏈接屬性是無連接。靜態局部變量只初始化一次,以后使用時的值是上次使用后的值(類似全局變量)
(2)第二種是用來修飾全局變量,使之成為靜態全局變量;靜態全局變量存儲在數據段/bss段中,作用域是文件作用域,生命周期是程序生命周期,鏈接屬性是外鏈接。static修飾的全局變量只在定義它的源文件內有效,在同一源程序的其它源文件內不可使用,利用此特性可以避免多文件變量重名的問題。
(3)第三種是用來修飾函數,使之成為靜態函數;靜態全局變量存儲在數據段/bss段中,作用域是文件作用域,生命周期是程序生命周期,鏈接屬性是內鏈接。static修飾的函數只在定義它的源文件內有效,在同一源程序的其它源文件內不可使用,利用此特性可以避免多文件函數重名的問題。
(4)在多個源文件的程序中,只在一個源文件使用的函數或者全局變量應該加static關鍵字加以說明。
2、auto
這個關鍵字只有一種用法:
只能用來修飾局部變量,使之成為自動局部變量,自動局部變量存儲在棧上,其實我們平常定義的局部變量就是自動局部變量,只是我們把auto關鍵字省略了;可見,定義普通的局部變量默認就是auto關鍵字修飾的局部變量。
3、extern
(1)這個關鍵字常用來聲明全局變量;目地是在多文件項目中在a.c中定義全局變量而在b.c中使用這個全局變量;
(2)因為C語言程序編譯時是以單個.c文件為單位編譯的,如果不聲明直接使用,編譯器就會報錯誤,解決方案就是使用extern關鍵字聲明(注意聲明時不能賦值,否則會出現錯誤:重復定義)
(3)應該在b.c中使用這個全局變量之前聲明這個全局變量,告訴編譯器我在別的文件中定義了這個全局變量,并且原型和聲明一樣,這樣鏈接時鏈接器就會去別的.o文件中找到這個同名的全局變量。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。