當前位置:才華齋>計算機>C語言>

C語言編譯預處理和動態儲存分配考點解析

C語言 閱讀(1.73W)

下面是本站小編收集整理的C語言編譯預處理和動態儲存分配考點解析,歡迎學習!

C語言編譯預處理和動態儲存分配考點解析

  13.1巨集定義(不帶引數的巨集定義,帶引數的巨集定義)

1.編譯預處理就是對C源程式進行編譯前,由″編譯預處理程式″對預處理命令列進行處理的過程。

2.C語言中,凡是以″#″開頭的行,都稱為″編譯預處理″命令列。C語言中的編譯預處命令有:#define,#undef,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#line,#pragma,#error。這些預處理命令組成的預處理命令列必須在一行的開頭以″#″號開始,每行的未尾不得加″;″號,以區別於C語句、定義和說明語句。

3.不帶引數的巨集定義:命令的'一般形式為:

#define識別符號字串

定義中的″識別符號″為使用者定義的識別符號,稱為巨集名。在預編譯時,C預編譯程式將出現的巨集名替換成″字串″的內容,這一過程也稱為巨集展開。

4.帶引數的巨集定義:命令的一般形式為

#define巨集名(形式引數)字串

定義中的″字串″應包含括號中所指定的形式引數。注意巨集名與括號之間不要加空格,否則就成為不帶引數的巨集定義了。

5.預編譯時,遇到帶實參的巨集名,則按命令列中指定的字串從左到右進行置換,原則是:遇到實參則以實參代替,非形參字元原樣保留,從而成展開後的內容。

  13.2“檔案包含”處理

1.檔案包含的一般形式為:

#include″標頭檔案名″

#include<標頭檔案名>

標頭檔案名一般由C語言提供,也可以是使用者自己編寫的,標頭檔案通常用.h作為字尾。

2.當頭檔名用雙引號括起來時,系統首先在使用此命令的檔案所在的目錄中查詢被包含的檔案,找不到時,再按系統指定的標準方式檢索其它目錄;當頭檔名用尖括號括起來時,則直接按系統指定的標準檢索方式查詢被包含的檔案。

3.預編譯時,將被包含檔案的內容全部複製到包含檔案中,這就是檔案″包含處理″。

  相關閱讀:C語言使用者識別符號的作用域和儲存類考點解析

  12.1 區域性變數和全域性變數

在函式內部或複合語句內部定義的變數稱為區域性變數。函式的形參屬於區域性變數。在函式外部定義的變數稱為全域性變數。有時,區域性變數也稱為內部變數,全域性變數也稱為外部變數。

  12.2 變數的儲存屬性(自動、靜態、暫存器、外部),變數的作用域和生存期

C語言中來說明變數儲存屬性的關鍵字有四個:auto(自動)、static(靜態)、register(暫存器)、extern(外部)。

1.區域性變數的儲存屬性

區域性變數可以是自動類別(用auto,register說明),也可以是靜態類別(用static說明)。形參只能是自動儲存類別,不允許是static類別。

當局部變數未指明類別時,被自動說明成自動(auto)變數。這類區域性變數稱為自動變數。其值存放在記憶體的動態儲存區,因此在退出作用域後,變數被自動釋放,其值不予保留。

當局部變數說明成暫存器(register)型別時,與自動(auto)變數一樣屬於自動類別,所不同的是此時變數的值保留在CPU中的暫存器中。

當變數說明成static(靜態)型別時,稱這樣的變數為靜態區域性變數。在程式執行期間,它佔據一個永久的儲存單元,在函式退出後,變數的值仍舊保留。

2.全域性變數的儲存屬性

全域性變數都屬於靜態儲存類別,可以用extern和static對它們進行說明。

當一個檔案中要引用另一檔案中的全域性變數或在全域性變數定義前要引用它時,可用extern說明。相當於擴大全域性變數的作用域。

用static(靜態)說明的全域性變數稱為靜態全域性變數,它僅能由本檔案引用,即使在其檔案中用extern說明也不能使用,它相當於限制了全域性變數作用域的擴充套件。

  12.3 內部函式和外部函式

1.在C語言中,所有的函式在本質上都是外部函式。

2.函式定義時用extern進行說明稱為外部函式。函式的隱含類別為外部函式,外部函式可以被其他檔案呼叫。

3.定義函式時用static進行說明稱為靜態函式,也稱內部函式。靜態函式也是外部函式,只是它僅侷限於它所在的檔案,其他檔案不能呼叫。