C程式設計 讀書筆記系列文章之第八章 預編譯處理

2021-09-22 05:00:40 字數 1266 閱讀 3853

c編譯系統在對程式進行通常的編譯之前,先進行預處理。c提供的預處理功能主要有以下三種:1)巨集定義 2)檔案包含 3)條件編譯

1. 巨集定義

不帶引數的巨集定義

用乙個指定的識別符號來代表乙個字串,形式:#define 識別符號 字串

幾點說明:

1) 巨集名一般用大寫

2) 巨集定義不作語法檢查,只有在編譯被巨集展開後的源程式時才會報錯

3) 巨集定義不是c語句,不在行末加分號

4) 巨集名有效範圍為定義到本原始檔結束

5) 可以用#undef命令終止巨集定義的作用域

6) 在巨集定義時,可以引用已定義的巨集名

帶引數的巨集定義

定義形式:#define 巨集名(參數列) 字串 

這和函式有些類似,但他們是不同的:

1) 函式呼叫時,先求實參表示式值,再代入形參,而巨集只是簡單替換,並不求值

2) 函式呼叫是在程式執行時分配記憶體的,而巨集展開時並不分配記憶體,也沒有返回值的概念

3) 對函式中的實參和形參都要定義型別,而且要求一致,巨集名無型別,其引數也沒有型別。

4) 函式只有乙個返回值,而巨集可以得到幾個結果

5) 巨集替換不佔執行時間,只佔編譯時間,而函式呼叫佔執行時間

2. 檔案包含處理

#include "檔案1" 就是將檔案1的全部內容複製插入到#include位置,作為乙個原始檔進行編譯。

在#include命令中,檔名可以用" "也可以用< >,假如現在file1.c中包含file2.**件," "表示系統先在file1.c所在目錄中找file2.h,如果找不到,再按系統指定的標準方式檢索目錄,< >表示系統直接按指定的標準方式檢索目錄。所以用" "保險一點。

3. 條件編譯

條件編譯指不對整個程式都編譯,而是編譯滿足條件的那部分。條件編譯有以下幾種形式:

1)#ifdef 識別符號

程式段1

#else

程式段2

#endif

它的作用:當識別符號在前面已經被定義過(一般用#define),則對程式段1編譯,否則對程式段2編譯。

2)#ifndef 識別符號

程式段1

#else

程式段2

#endif

它的作用和#ifdef相反,當識別符號沒被定義過,對程式段1編譯,否則對程式段2編譯。

3)#if 表示式

程式段1

#else

程式段2

#endif

它的作用:當表示式值為真(非0)時,對程式段1編譯,否則對程式段2編譯。

第八章讀書筆記

本章主要講了蜂鳴器的實驗原理,通過完整的蜂鳴器驅動控制蜂鳴器的開啟與關閉。蜂鳴器是s3c410開發板上帶的乙個硬體裝置。可以通過向暫存器寫入特定的值來控制蜂鳴器發出尖叫聲。蜂鳴器也稱為pwm脈衝寬度調製,基本原理就是通過脈衝來控制蜂鳴器的開啟和停止。pwm驅動的實現方式不同於led驅動,pwm驅動由...

第八章 讀書筆記

第八章 讓開發板發出聲音 蜂鳴器驅動 一.linux驅動的 重用。linux驅動的 重用有很多種方法。可以採用標準的c程式的方式,將要重用的 放在其他的檔案中。也可以使用另外一種動態重用的方式,也就是喲個linux驅動可以使用另外乙個linux驅動中的資源。二.強行解除安裝linux驅動。如果編寫的...

第八章讀書筆記

第8 章 重用 1,靜態重用 將要重用的 放在其他的檔案中,如果要使用某些功能,include 相應的標頭檔案即可 2,動態重用 乙個 linux 驅動可以使用另外乙個 linux 驅動中的資源 解除安裝由於異常情況而導致的linux 驅動模組無法解除安裝的情況 1.初始化函式崩潰 將當前的linu...