從零開發B S機架應用程式(七)巨集定義的使用

2021-08-18 19:07:36 字數 2168 閱讀 3839

**

看下面的一段**

enum audiomasteropcodes

;

在c或c++語言源程式中允許用乙個識別符號來表示乙個字串,稱為「巨集」。

被定義為「巨集」的識別符號稱為「巨集名」。在編譯預處理時,對程式中所有出現的「巨集名」,都用巨集定義中的字串去代換,這稱為「巨集代換」或「巨集展開」。巨集定義是由源程式中的巨集定義命令完成的。巨集代換是由預處理程式自動完成的。

無參巨集的巨集名後不帶引數。

其定義的一般形式為:

#define 識別符號 字串
例如:

#define m (a+b)
它的作用是指定識別符號m來代替表示式(a+b)。在編寫源程式時,所有的(a+b)都可由m代替,而對源程式作編譯時,將先由預處理程式進行巨集代換,即用(a+b)表示式去置換所有的巨集名m,然後再進行編譯。

對於巨集定義還要說明以下幾點:

- 1. 巨集定義是用巨集名來表示乙個字串,在巨集展開時又以該字串取代巨集名,這只是一種簡單的代換,字串中可以含任何字元,可以是常數,也可以是表示式,預處理程式對它不作任何檢查。如有錯誤,只能在編譯已被巨集展開後的源程式時發現。

- 2. 巨集定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。

- 3. 巨集定義必須寫在函式之外,其作用域為巨集定義命令起到源程式結束。如要終止其作用域可使用#undef命令。

在巨集定義中的引數稱為形式引數,在巨集呼叫中的引數稱為實際引數。對帶引數的巨集,在呼叫中,不僅要巨集展開,而且要用實參去代換形參。

帶參巨集定義的一般形式為:

#define 巨集名(形參表) 字串

字串中含有各個形參。

帶參巨集呼叫的一般形式為:

巨集名(形參表)

例如:

#define m(y) ((y)*(y)+3*(y)) /*巨集定義*/
#define a(x) t_##x

#define b(x) #@x

#define c(x) #x

關鍵是要在每乙個換行的時候加上乙個」\」

#define     dorecovery()/   

led_run=1;/

val1=off;/

val2=off;/

pump=off;/

val3=on;/

compre=on;

在大規模的開發過程中,特別是跨平台和系統的軟體裡,define最重要的功能是條件編譯。

//就是:

#ifdef windows

......

......

#endif

#ifdef linux

......

......

#endif

//可以在編譯的時候通過#define設定編譯環境

//定義巨集

#define [macroname] [macrovalue]

//取消巨集

#undef [macroname]

普通巨集#define pi (3.1415926)

帶引數的巨集

#define max(a,b) ((a)>(b)? (a),(b))

關鍵是十分容易產生錯誤,包括機器和人理解上的差異等等。

標頭檔案(.h)可以被標頭檔案或c檔案包含;重複包含(重複定義)由於標頭檔案包含可以巢狀,那麼c檔案就有可能包含多次同乙個標頭檔案,就可能出現重複定義的問題的。

通過條件編譯開關來避免重複包含(重複定義)

//例如

#ifndef __headerfile***__

#define __headerfile***__

…  //檔案內容

…  #endif

#define s(r) r*r

area=s(a+b);//第一步換為area=r*r;,第二步被換為area=a+b*a+b;

//正確的巨集定義是

#define s(r) (r)*(r)

從零開發B S機架應用程式(四) TCP

傳輸控制協議。與udp不同,他是面向連線和資料流的可靠傳輸協議。也就是,他能夠使一台計算機上的資料無差錯的發往網路的其他計算機,所以當藥傳輸大量資料時,我們選用tcp協議。qtcpserver的基本操作 1 呼叫listen監聽埠。2 連線訊號newconnection,在槽函式裡呼叫nextpen...

從零開發B S機架應用程式(十)網路通訊上

簡述 在我們使用客戶端的時候,客戶端是如何通訊的呢?下面就簡單的說說看 通訊流程 下面是流程圖 通訊的基礎是tcp ip模型 伺服器搭建 伺服器搭建流程 網路通訊的基礎知識 tcp ip 四層協議 tcp報文段首部格式 此部分是傳輸層資料封裝,封裝後給網路層,ip資料報 序號 seq序號,佔32位,...

應用程式開發步驟

c 是一種編譯語言,c 源程式需要經過編譯 連線,生成可執行檔案後方可執行。使用c 開發乙個應用程式大致要經過以下步驟 1 首先要根據實際問題確定程式設計的思路,包括選用適當的數學模型。這方面的內容其實也是各應用學科的主要研究領域之一。2 根據前述思路或數學模型編寫程式。除了非常簡單的問題可以直接寫...