C語言基礎四 預處理和變數型別

2021-06-21 03:10:03 字數 1684 閱讀 8607

預處理指令:以#號開頭,可以寫在任何位置,在編譯之前執行

巨集定義檔案包含    條件編譯

一:巨集定義:無引數/有引數

num叫做巨集名,6是用來替換巨集名的字串

#define num 6

#define sum(a,b) ((a)*(b))//這裡需要括號括起來,防止複雜運算出錯

@巨集定義和函式雖然相似,但巨集定義在編譯之前作好計算,函式是在程式執行時呼叫,所以巨集定義效率更高。

@巨集定義不檢測型別。但是替換之後,編譯器會檢查

@巨集定義不涉及型別判斷

二:條件編譯:程式中需要哪段**編譯哪段

#define num 10//條件一般需要用到巨集定義

#if 條件1//不可以放變數

。。。code1。。。 //如果條件1成立,則把code1編譯程序式

#elif 條件2

。。。code2。。。

#else

。。。code3。。。

#endif

其他用法:

#if defined(max)//#if !defined(max)

。。。code。。。

#endif

#ifdef max//#ifndef max

三:檔案包含:include

#include 《檔名》:直接到c語言庫函式標頭檔案所在的目錄中尋找檔案

#include "檔名":在原程式當前目錄中尋找,若找不到,則在系統path中找,最後才在c語言庫中找。

@允許巢狀包含,不允許遞迴包含(相互包含)

@防止標頭檔案裡面的內容重複包含:每乙個標頭檔案中都使用條件編譯

變數型別:

c語言根據儲存型別的不同,可以把變數分為:自動變數,

靜態變數

,暫存器變數。

對應於儲存的地方有3種:執行時堆疊,

普通記憶體

,硬體暫存器

@自動變數:被auto修飾的區域性變數都是自動變數,預設情況下區域性變數都是自動變數,auto可以省略;

全域性變數不可能是自動變數:生命週期長 ,很多地方都有。

@靜態變數:

1.包括所有全域性變數。

2.static修飾的區域性變數(即改變生命週期,但沒有改變作用域)

@暫存器變數:儲存在硬體暫存器中的變數

int main()
被register修飾的自動變數都是暫存器變數

只限於int , char 和指標型別的變數使用

一般將一些使用頻繁的自動變數定義為暫存器變數,其他用記憶體。

C語言基礎 預處理

預處理 1.c語言在對源程式進行編譯之前,會先對一些特殊的預處理指令作解釋 比如之前使用的 include檔案包含指令 產生乙個新的源程式 這個過程稱為編譯預處理 之後再進行通常的編譯 2.為了區分預處理指令和一般的c語句,所有預處理指令都以符號 開頭,並且結尾不用分號 3.預處理指令可以出現在程式...

C語言基礎 預處理

預處理 預處理命令是由ansi c統一規定的,但是它們不是c語言本身的組成部分,不能直接對它們進行編譯 因為編譯程式不能識別它們 必須在對程式進行通常的編譯 包括詞法和語法分析 生成 優化等 之前,先對程式中這些特殊的命令進行 預處理 即根據預處理命令對程式作相應的處理 例如,若程式中用 defin...

C語言基礎 預處理指令

在編譯前進行解析處理的指令 源 編譯預處理 編譯 鏈結 執行 編譯預處理指令 1.巨集定義 define 1.1 不帶引數的巨集定義 1.2 帶引數的巨集定義 2.條件編譯 3.檔案包含 include 編譯預處理指令 1.所有的編譯預處理指令都是以 號開頭 2.所有的編譯預處理指令都不需要分號 巨...