- 相關推薦
C語言編譯預處理和動態存儲分配考點解析
下面是百分網小編收集整理的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進行說明稱為靜態函數,也稱內部函數。靜態函數也是外部函數,只是它僅局限于它所在的文件,其他文件不能調用。
【C語言編譯預處理和動態存儲分配考點解析】相關文章:
C語言編譯預處理和動態存儲分配07-21
計算機二級C語言編譯預處理和動態存儲分配知識考點歸納09-24
c語言編譯預處理10-15
C語言的預處理08-02
C語言條件編譯07-22
C語言的編碼編譯08-11
C語言編譯器和IDE選擇09-22
C語言編譯器和IDE的選擇06-30
有趣的C語言預處理07-29