日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言宏定义_掌握C语言,中文编程不是梦

發(fā)布時間:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言宏定义_掌握C语言,中文编程不是梦 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文/Edward


前面我們在講節(jié)程序編譯的時候,編譯器做的第一步就是預(yù)處理。C語言的預(yù)處理,其實是編譯器在對整個工程編譯之前做的一些文本性質(zhì)的工作,例如我們經(jīng)常使用的#include,這就是一個典型的文件包含預(yù)處理,當(dāng)啟動編譯的時候,編譯器首先先做預(yù)處理,即將#include后面包含的那個文件里面的內(nèi)容,全部復(fù)制到當(dāng)前的.c文件中來,接著,再進(jìn)行C語言源文件的編譯。除了文件包含之外,C語言中的預(yù)處理還有很多,而這些預(yù)處理對于我們編程來說,都可以幫助我們提高代碼的易讀性和代碼質(zhì)量。


#define預(yù)處理

#define預(yù)處理的作用,一般在一些書上面僅僅稱其為“宏定義”,其實這個稱呼是不嚴(yán)謹(jǐn)?shù)?#xff0c;一個#define預(yù)處理其實包含兩種意思,第一種意思是“宏定義”,第二個層面的意思是替換,下面的內(nèi)容,我們將會以上面兩層意思分開講解。

#define替換

也許我們在單片機(jī)編程中,絕大多數(shù)用戶使用的僅僅只是#define預(yù)處理的替換功能,#define的替換格式為:

#define NAME 需要替換的內(nèi)容

比如,我們一般常用的用來定義圓周率Π,就可以寫成:

#define PI 3.1415926

那么以后的程序代碼里面只要出現(xiàn)PI這個標(biāo)號,編譯器都將直接將其替換成一個浮點數(shù)3.1415926。

在用#define定義標(biāo)號的時候需要注意,一般地我們都以大寫字母來拼寫這個標(biāo)號,而且這個標(biāo)號在用#define定義時,我們都默認(rèn)地將其放入相應(yīng)的.h頭文件中。如圖1所示的求圓形面積和周長的程序。

圖1 求圓的周長和面積

用#define定義的標(biāo)號不止可以替換一些數(shù)值,還可以替換關(guān)鍵詞和函數(shù),例如,想要讓C語言變成一個中文的編程語言,就可以直接用#define定義中文標(biāo)號來替換C語言的關(guān)鍵詞,如圖2所示。

圖2 用中文編寫C語言

需要注意的是,MinGW編譯器自身不支持中文類型的變量,所以如果要嘗試只能在Visual studio軟件中使用MSVC來嘗試。

#define除了可以替換數(shù)值、關(guān)鍵詞和函數(shù)之外,還可以用來替換程序語句,我們可以將需要執(zhí)行的程序語句,利用#define重新定義成一個標(biāo)號,如圖3所示。

圖3 #define替換程序語句

在圖3中,我們利用#define定義了一個程序計算語句,這個標(biāo)號在程序執(zhí)行的時候就會自動被替換成后面的2*3運(yùn)算語句去執(zhí)行了。接著我們再來看一段代碼。如8-1-4所示。

圖4 錯誤的#define替換

按照我們正常的理解,圖4中的程序理論上來說應(yīng)該輸出25才對,但是為什么結(jié)果卻和我們想象的不一樣呢?這是因為#define定義的標(biāo)號在編譯的時候是文本直接替換的,因此當(dāng)在程序里面執(zhí)行STENCE*STENCE的時候,我們認(rèn)為的應(yīng)該執(zhí)行(2+3)*(2+3),而實際上STENCE是直接被2+3替換的,所以在程序編譯時的真實替換應(yīng)該是2+3*2+3,因此輸出的值才和我們想象中的不一樣,這就是典型的#define替換錯誤。只需要在2+3外面加上括號即可,如圖5所示。

圖5 正確的#define程序語句替換

而當(dāng)我們在替換多條語句的時候,一定要用“do{……}while(0);“的形式來將標(biāo)號里面的多條執(zhí)行語句打包好,以防止不必要的錯誤產(chǎn)生。如圖6所示。

圖6 #define替換多條程序語句

定義宏

#define除了用作簡單和復(fù)雜的程序文本替換之外,這個機(jī)制還包括了一個規(guī)定,即可以將參數(shù)替換到文本中去進(jìn)行計算,這種實現(xiàn)通常被稱為宏(macro)。

宏定義的聲明方式為:

#define 宏名稱(參數(shù)1, 參數(shù)2, ……) 帶參數(shù)的表達(dá)式

當(dāng)宏被調(diào)用時,參數(shù)列表中的每一個值都會與宏表達(dá)式實體中的每一個值所一一對應(yīng),并且進(jìn)行替換。如,我們定義一個用于計算平方的宏,就可以寫成:

#define SQUARE(x) x*x

下面程序使用宏定義計算5的平方,就可以直接使用SQUARE(5)。

如圖7所示,我們可以將圓的面積和周長計算分別寫成宏的形式進(jìn)行運(yùn)算。

圖7 宏定義計算圓的周長和面積

但是還需要注意的是,宏定義的參數(shù)替換也僅僅是文本形式的替換,如圖8所示。

圖8 宏定義的錯誤計算

圖8的程序中,我們原本想的是,輸入的半徑變成11之后,通過調(diào)用宏,并且傳入?yún)?shù)rad + 1,理論上來說應(yīng)該和8-1-7中輸出一樣的計算結(jié)果才對,但是實際上,這個傳入的參數(shù)在替換時也是僅僅被當(dāng)作文本去替換了,因此圖8程序?qū)嶋H的計算過程應(yīng)該是,以周長為例,2*3.1415926*11+1=70.12。所以在宏定義的時候,我們也應(yīng)該為其參數(shù)增加括號,以提高整個宏的完整性。如圖9所示。

圖9 宏定義參數(shù)的正常使用

除了上述的功能之外,宏定義最常被使用的就是比較兩個數(shù)的大小了,之前我們比較兩個書的大小都是使用if來判斷的,但是學(xué)了宏之后,結(jié)合三目運(yùn)算符就可以直接使用一個宏定義來完成了,如圖10所示。

圖10 使用宏定義比較大小

http://weixin.qq.com/r/BjsfB7PEhO77rfdk924U (二維碼自動識別)

總結(jié)

以上是生活随笔為你收集整理的c语言宏定义_掌握C语言,中文编程不是梦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。