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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

应用C预处理命令

發(fā)布時(shí)間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 应用C预处理命令 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

********************************LoongEmbedded********************************

作者:LoongEmbedded(kandi)

時(shí)間:2011.10.17

類別:C基礎(chǔ)

********************************LoongEmbedded********************************

很多C編譯系統(tǒng)都包含預(yù)處理、編譯和連接等部分,其中C提供的預(yù)處理功能主要有下面三種:

1)????? 宏定義

2)????? 文件包含

3)????? 條件編譯

?

下面是我在開(kāi)發(fā)WINCE6.0+S3C6410的背光驅(qū)動(dòng)的時(shí)候,因?yàn)榭紤]要兼容開(kāi)發(fā)板和實(shí)際項(xiàng)目A,利用C預(yù)處理功能來(lái)處理時(shí)遇到的問(wèn)題的描述和總結(jié),利用C預(yù)處理功能所添加的應(yīng)用如下:

1)????? 在bsp_cfg.h中添加下面的宏定義

#define PROJECT_A

2)????? 在backlight_pdd.cpp下的BL_InitPWM()加入下面的條件編譯內(nèi)容

#ifdef PROJECT_A

…………………………

RETAILMSG(1, (TEXT("BL_InitPWM() define A\r\n")));

#else

………………………..

RETAILMSG(1, (TEXT("BL_InitPWM() no define A\r\n")));

#endif

上面條件編譯的作用是若所指定的標(biāo)識(shí)符PROJECT_A已經(jīng)被#define命令定義過(guò)(當(dāng)然了,如果在其他目錄下的文件定義,要使用,就必須用文件包含的方式包含進(jìn)來(lái)。),則在程序編譯階段編譯RETAILMSG(1, (TEXT("BL_InitPWM() define A\r\n")));所在的程序段;否則編譯RETAILMSG(1, (TEXT("BL_InitPWM() no define A\r\n")));所在的程序段。

?

3)????? 編譯整個(gè)BSP后生成新的NK更新之后,始終輸出BL_InitPWM() no define A,因?yàn)樵赽sp_cfg.h中定義了PROJECT_A,那么應(yīng)該輸出BL_InitPWM() define A才對(duì)啊。

?

當(dāng)時(shí)項(xiàng)目進(jìn)度很緊,一時(shí)找不出問(wèn)題在哪里,所以換了另外一種的處理方式,現(xiàn)在趁相對(duì)有空的時(shí)候來(lái)查找一個(gè)問(wèn)題的原因,經(jīng)過(guò)仔細(xì)檢查,是因?yàn)闆](méi)有在backlight_pdd.cpp下沒(méi)有把定義了宏P(guān)ROJECT_A的文件包含進(jìn)來(lái)。當(dāng)時(shí)因?yàn)樵趯?duì)背光驅(qū)動(dòng)編譯的時(shí)候沒(méi)有出現(xiàn)編譯出錯(cuò),所以就沒(méi)有注意到這個(gè)問(wèn)題,這是我對(duì)預(yù)處理命令和C語(yǔ)句的理解不太清晰所致,這里強(qiáng)調(diào)一點(diǎn)就是:預(yù)處理命令不是C語(yǔ)言的一部分,C預(yù)處理命令(主要包括宏定義命令、文件包含命令和條件編譯命令)是在預(yù)處理階段處理的,而C語(yǔ)句是在編譯階段處理的。

?

在backlight_pdd.cpp下沒(méi)有添加下面文件包含命令

#include "bsp_cfg.h"

的情況下,在預(yù)處理階段,第2)點(diǎn)的條件編譯處就被認(rèn)為是沒(méi)有定義了宏P(guān)ROJECT_A,自然而然地在程序編譯階段編譯RETAILMSG(1, (TEXT("BL_InitPWM() no define A\r\n")));所在的程序段。解決的辦法就是在backlight_pdd.cpp下添加文件包含命令#include "bsp_cfg.h"。

?

“文件包含”處理是指一個(gè)源文件可以將另外一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái),即將另外的文件包含到本文件之中,這里就是把文件bsp_cfg.h的內(nèi)容包含到文件backlight_pdd.cpp中?!拔募泵羁梢怨?jié)省程序設(shè)計(jì)人員的重復(fù)勞動(dòng),比如在某個(gè)頭文件中定義了一些共用的宏定義、全局變量、結(jié)構(gòu)體、函數(shù)等等,這樣其他文件都可以通過(guò)“文件包含”命令來(lái)把這個(gè)文件包含進(jìn)來(lái),這樣就可以使用此文件中的定義了。

?

總結(jié)

以上是生活随笔為你收集整理的应用C预处理命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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