1
#error 與#warning
談到預(yù)編譯大家常用的有#if、#else、#ifdef、#ifndef、#endif等等條件編譯選項(xiàng)。
然而在我們閱讀一些大型的代碼或者庫(kù)的時(shí)候,一般都會(huì)看到有#error和#warning,可能有些小伙伴一掃而過并沒有了解清楚這些預(yù)編譯指令到底該怎么用,寫了很久的代碼估計(jì)也重來沒有敲過他們。
#error / #warning
形式 :#error / #warningmessage
作用 :生成一個(gè)編譯錯(cuò)誤事件并停止編譯/發(fā)出警告信息
注意 :message可以不需要雙引號(hào)。
參考demo:
#include
輸出結(jié)果:
編譯失敗,無法生成可執(zhí)行文件
上面是放開宏,且使用warning的情況,無其他錯(cuò)誤的情況下可以生成可執(zhí)行文件。
解釋一下:
通過上面的測(cè)試代碼可以了解到,通過配合條件預(yù)編譯#if等,#error和#warning能夠在編譯過程中分別以錯(cuò)誤和告警的形式提醒開發(fā)人員注意相關(guān)代碼設(shè)計(jì)問題,從而保證代碼正確性。
這樣對(duì)于發(fā)布一些龐大的庫(kù)代碼時(shí),為了讓開發(fā)人員正確的使用庫(kù),這些提示會(huì)幫助他更好的移植代碼。
那么經(jīng)常有很多小伙伴編譯出來的代碼有一大堆warning,總是覺得warning關(guān)系不大,然而warning也是分不同類型的,對(duì)于一些未使用的變量倒關(guān)系不大,其他情況還是要認(rèn)真對(duì)待,最好是做到"0 Error,0 warning".
2
#undef
#undef標(biāo)識(shí)符用于把前面的宏定義名取消,別看這宏用得不多,作用可大著呢,下面我簡(jiǎn)單舉幾個(gè)例子:
1
局部宏定義
一旦定義了宏,那么該文件中往下所有的代碼都可以使用該宏,即使是函數(shù)內(nèi)部,這樣導(dǎo)致宏比較混亂,如下面代碼:
參考demo:
#include
輸出結(jié)果:
解釋一下:
假如我們沒有注意到函數(shù)內(nèi)部的同名宏定義,當(dāng)然告警也沒管,那么在main函數(shù)中使用同名宏定義就可能不是我們期待的最上面的宏定義,造成程序bug。
所以我們可以使用#undef來限制每個(gè)宏的作用域,如果每個(gè)函數(shù)內(nèi)部都使用了#undef,那么main函數(shù)中再使用會(huì)報(bào)宏沒有定義,這樣便可以找到問題,當(dāng)然也可以通過警告了解到。
2
選擇接口
通過宏來切換不同的接口供程序使用:
參考demo:
#include
#include
輸出結(jié)果:
3
自定義接口
當(dāng)多個(gè)人維護(hù)一套代碼的時(shí)候,有些同事喜歡調(diào)用庫(kù)函數(shù)接口,而有些同事喜歡調(diào)用自定義接口,為了方便統(tǒng)一使用自定義接口或者庫(kù)接口,我們會(huì)進(jìn)行如下操作:
參考demo:
#include
#ifndef__DRIVE_H__ #define__DRIVE_H__ #defineprintfprintf("pleaseuseKprintf! "); externvoidKprintf(char*str); #endif
輸出結(jié)果:
這樣下面的代碼你就只能夠使用Kprintf來進(jìn)行輸出打印,而當(dāng)我們放開注釋掉的宏,這樣就又可以使用printf了,還是比較方便的。
責(zé)任編輯:lq
-
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70756 -
編譯
+關(guān)注
關(guān)注
0文章
679瀏覽量
34003
原文標(biāo)題:"最常見"卻又"最不常用"的三個(gè)預(yù)編譯
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
DC/DC轉(zhuǎn)換器選型的三個(gè)要點(diǎn)

如何檢測(cè)三極管的三個(gè)極
如何區(qū)分場(chǎng)效應(yīng)管mos管三個(gè)引腳
Linux系統(tǒng)中最重要的三個(gè)命令
簡(jiǎn)述光刻工藝的三個(gè)主要步驟
可調(diào)電阻三個(gè)腳怎么接 可調(diào)電阻怎么測(cè)量好壞
自動(dòng)發(fā)電控制系統(tǒng)具有三個(gè)基本功能
自愈式低壓電容器三個(gè)接線柱的正確接法

評(píng)論