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...