嵌入式C語言面試常問關鍵字

2021-09-29 05:49:17 字數 1489 閱讀 8235

修飾變數

變數分為區域性變數和全域性變數,都儲存在靜態區,而普通變數儲存在棧區。

靜態全域性變數作用域僅僅侷限於變數被定義的檔案中,其他檔案不能使用;

靜態區域性變數只能在函式中使用,同乙個檔案中其他函式沒法使用,它儲存在靜態區,即使函式結束,這個靜態區域性變數的值不會被銷毀,直到程式結束才會銷毀,函式下次使用時仍能使用該值並且保持上次運算結果,預設初始化為0,並且僅初始化一次。

修飾函式

靜態函式作用域僅侷限於本檔案,又稱內部函式,不能被其他檔案使用,其他檔案可以定義相同名字的函式,不會發生衝突。

修飾類

static修飾的內部類相當於乙個普通的類,訪問方式為(new 外部類名.內部類的方法() )。

靜態類只用於包含靜態成員的型別,不能例項化,防止繼承,防止外部new操作。

說 const 定義的是變數,但又相當於常量;說它定義的是常量,但又有變數的屬性,所以叫常變數。

唯讀變數,具有不可變性,其值在編譯時不能被使用,因為編譯器在編譯時不知道其儲存的內容。

"唯讀",「不可修改」,「必須初始化」

const 與 define 的區別:

define是預編譯指令,而const是普通變數的定義。define定義的巨集是在預處理階段展開的,而const定義的唯讀變數是在編譯執行階段使用的。

const定義的是變數,而define定義的是常量。define定義的巨集在編譯後就不存在了,它不占用記憶體,因為它不是變數,系統只會給變數分配記憶體。但const定義的常變數本質上仍然是乙個變數,具有變數的基本屬性,有型別、占用儲存單元。可以說,常變數是有名字的不變數,而常量是沒有名字的。有名字就便於在程式中被引用,所以從使用的角度看,除了不能作為陣列的長度,用const定義的常變數具有巨集的優點,而且使用更方便。所以程式設計時在使用const和define都可以的情況下盡量使用常變數來取代巨集。

const定義的是變數,而巨集定義的是常量,所以const定義的物件有資料型別,而巨集定義的物件沒有資料型別。所以編譯器可以對前者進行型別安全檢查,而對後者只是機械地進行字元替換,沒有型別安全檢查。這樣就很容易出問題,即「邊際問題」或者說是「括號問題」。

const定義的唯讀變數在程式執行過程中只有乙份備份,而#define定義的巨集常量在記憶體中有若干備份。

用它修飾的變數表示可以被某些編譯器未知的因素更改,每次使用volatile變數都要從變數位址中讀取,直接訪問原始記憶體位址。

在當前執行緒內,讀取乙個變數時,為提高訪問速度,編譯器優化時會把變數讀取到乙個暫存器中,以後再取變數時直接從暫存器中讀取,當變數在當前執行緒改變時,會同時把變數新值拷貝到該暫存器中以便保持一致,當變數因別的執行緒改變了值,該暫存器的值不會相應改變,從而造成了應用程式讀取的值和實際的變數值不一樣。

volatile告訴編譯器不要做任何優化,用volatile定義的變數會在程式外改變,必須每次都從原始記憶體中讀取,不能直接使用cache或者暫存器的備份值。

使用volatile變數的例子:

關鍵字 嵌入式

const在指標中的用法 const int a 指向常整型的指標 int const a 指向常整型的指標 同上 int const a 指向整型的常指標 指標不可以改變,但是指標指向的物件的值可以改變 const int a 指向常整型數的指標 指標可以改變,但是指向的值是不可以改變的 cons...

嵌入式C語言入門 關鍵字 巨集

關鍵字extern const typedef define aad x,y x y define max x,y x y x y void test int main undef sum printf 在 d 行 n line printf 編譯的時間 s s n date time printf...

嵌入式C語言常用關鍵字 學習筆記2

1 關鍵字概念及sizeof,return 編譯器預先定義了一定意義的字串 sizeof是關鍵字 2 資料型別 掌握大小範圍 1 char 硬體晶元操作的最小單位 bit 軟體操作的最小單位 8bit 1b 乙個位元組 char 描述的是硬體能夠操作的在軟體上體現的最小單位 應用場景 2 int l...