關鍵字概述
很多朋友看到這兒可能會有疑問,往往其它講C語言的書籍都是從HelloWorld,數據類型開始C語言學習的,為什么我們要從C語言的關鍵字開始呢?關于這點,我有兩點需要說明:
本章節面向的讀者對象是有一定的C語言基礎知識的朋友(至少應該學習過大學里的C語言程序設計等類似的課程)
本章節結合了作者多年嵌入式工作、研究、教學經驗而作,由計算機底層硬件到上層軟件設計融會貫通,中間有大量的深入淺出的示例
在我對C語言進行培訓的時候,往往就是從C語言的關鍵字入手,因為C語言的關鍵字蘊含了C語言的全部的詞匯,囊括了C語言里大量知識要點,從C語言關鍵字開刀,首先可以對你之前所學知識進行復習,其次,切磋一下和作者有什么不同的見解,廢話少說,讓我們從關鍵字開始。
關鍵字,又叫保留字,是編譯器能識別的特殊單詞,每種計算機語言都會有其特定的關鍵字,C語言中有32位關鍵字。
問:為什么要有關鍵字?
答:關鍵字是程序設計中代碼必須包含的部分,編譯器在編譯C代碼的時候,必然要將C代碼進行斷句,將代碼分割成不同部分,將這些部分分別進行解析和編譯。
int a = 10; int是關鍵字,編譯器看到它出現,會將它后面的字符作為整型變量名來處理。
也就是說,關鍵字是編譯器能認識的特殊字符串符號。
關鍵字的數量是由編譯器來決定的,關鍵字大小寫敏感性也和編譯器有關。如果關鍵字寫錯,那么在代碼的解析過程中,編譯器就會報錯:符號不能識別或符號不能被解析。
每個關鍵字有著不同的意義,用來告知編譯器編程者的目的。
關鍵字分類
32個關鍵字每個都有不同的意義,大體上根據其意義可以分為以下幾類(下劃線表示不同分類中有交集):
1)非常見:auto、register、volatile、goto
2)存儲相關:const、extern、register、volatile、static、auto、signed、unsigned
3)數據類型:char、short、int、float、long、double、struct、union、enum、void
4)邏輯控制:if、else、for、while、do、break、continue、return、default、switch、case、goto
5)特殊用途:sizeof、typedef
我相信,大部分關鍵字我們都能認識,并且能夠使用,有一部分可能很少見,甚至一點印象也沒有:它也是C語言的關鍵字???
1.隱形刺客:auto
描述:auto關鍵字在我們寫的代碼里幾乎看不到,但是它又無處不在,它是如此的重要,又是如此的與世無爭,默默的履行著自己的義務,卻又隱姓埋名。
作用:C程序是面向過程的,在C代碼中會出現大量的函數模塊,每個函數都有其生命周期(也稱作用域),在函數生命周期中聲明的變量通常叫做局部變量,也叫自動變量。例如:
PS:有的編譯器為了提高效率,在出棧時不會進行數據清空,這也就意味著,下個函數里的變量在入棧使用該空間時,里面的數據是上一次變量操作的結果。
2.閃電飛刀:register
描述:register就和它的名字一樣,很少出現在代碼世界中,因為敢稱為閃電飛刀的變量,通常只會在一些特定場合才能出現。它是如此的快,以致于CPU都對其刮目相看,但是它有一個致命的缺點,它的速度“看心情”而定,不是每一次都能讓人滿意。
作用:如果一個變量被register來修辭,就意味著,該變量會作為一個寄存器變量,讓該變量的訪問速度達到最快。比如:一個程序邏輯中有一個很大的循環,循環中有幾個變量要頻繁進行操作,這些變量可以聲明為register類型。
寄存器變量:寄存器變量是指一個變量直接引用寄存器,也就是對變量名的操作的結果是直接對寄存器進行訪問。寄存器是CPU的親信,CPU操作的每個操作數和操作結果,都由寄存器來暫時保存,最后才寫入到內存或從內存中讀出。也就是說,變量的值通常保存在內存中,CPU對變量進行讀取先是將變量的值從內存中讀取到寄存器中,然后進行運算,運算完將結果寫回到內存中。為什么要這么設計,而不直接對變量的值從內存中進行運算,而要再借助于寄存器?這是由于考慮到性能的問題才這么設計的。在計算機系統中,包含有很多種不同類型的存儲器,如表xxx所示。
表xxx 計算機存儲器分類
名稱 | 速度 | 特點 | 用途 |
靜態存儲器 | 最快 | 造價高,體積大,適合小容量的緩存 | 寄存器,緩存 |
動態存儲器 | 較快 | 造價較低,體積較小,適合大容易保存數據 | 內存 |
|
新聞熱點
疑難解答
圖片精選