當前位置:首頁 » 編程軟體 » 編譯預處理時列印宏的值

編譯預處理時列印宏的值

發布時間: 2025-09-14 17:11:53

1. VC棰勫勭悊鎸囦護涓庡畯瀹氫箟鐨勫欑敤

銆銆鍒氭帴瑙﹀埌MFC緙栫▼鐨勪漢寰寰浼氳玀FC 鍚戝肩敓鎴愮殑鍚勭嶅畯瀹氫箟鍜岄勫勭悊鎸囦護鎵鍚撳 浣嗘槸棰勫勭悊鍜屽畯瀹氫箟鍙堟槸C璇璦鐨勪竴涓寮哄ぇ宸ュ叿 浣跨敤瀹冧滑鍙浠ヨ繘琛岀畝鍗曠殑婧愪唬鐮佹帶鍒 鐗堟湰鎺у埗 棰勮︽垨鑰呭畬鎴愪竴浜涚壒孌婄殑鍔熻兘

銆銆 涓涓緇忓吀鐨勪緥瀛

銆銆浣跨敤棰勫勭悊涓庡畯瀹氫箟鏈緇忓吀鐨勪緥瀛愯帿榪囦簬鍔犲湪涓涓澶存枃浠朵腑浠ラ伩鍏嶅ご鏂囦歡琚涓ゆ$紪璇 璇曟兂榪欑嶇殑鎯呭喌 鏈変竴涓鏂囦歡headerfile h 瀹冭鍖呭惈鍦╤eaderfile h涓 鍚屾椂鍦╤eaderfile h 涓涔熻鍖呭惈浜 鐜板湪鏈変竴涓狢PP鏂囦歡 implement cpp 鍖呭惈浜唄eaderfile h 鍜宧eaderfile h

銆銆#include headerfile h

銆銆#include headerfile h

銆銆鍋囪緃eaderfile h 涓瀹氫箟浜嗕竴涓鍏ㄥ矓鍙橀噺 iglobal

銆銆int iglobal

銆銆鍦ㄧ紪璇戠殑鏃跺欑紪璇戝櫒涓ゆ$紪璇慼eaderfile 涔熷氨浼氬彂鐜癷global琚瀹氫箟浜嗕袱嬈 榪欐椂灝變細鍙戠敓鍙橀噺閲嶅畾涔夌殑緙栬瘧閿欒

銆銆浼犵粺鐨勮В鍐沖姙娉曟槸浣跨敤#ifdef 浠ュ強#endif 鏉ラ伩鍏嶅ご鏂囦歡鐨勯噸澶嶇紪璇 鍦ㄤ笂闈㈢殑渚嬪瓙涓 鍙闇瑕佸姞涓婅繖涔堝嚑琛

銆銆#ifndef *** artnose_ _ _ _headerfile_h

銆銆#define *** artnose_ _ _ _headerfile_h

銆銆int iglobal

銆銆#endif

銆銆浠旂粏鐨勮冭檻涓婇潰鐨勫畯瀹氫箟 浼氬彂鐜板綋緙栬瘧鍣ㄧ紪璇戣繃涓嬈headerfile h浠ュ悗 *** artnose_ _ _ _headerfile_h 榪欎釜瀹忓氨琚瀹氫箟浜 浠ュ悗瀵筯eaderfile h鐨勭紪璇戦兘浼氳煩榪噄nt iglobal 榪欎竴琛 褰撶劧 *** artnose_ _ _ _headerfile_h 榪欎釜瀹忔槸鍙浠ヤ換鎰忓畾涔夌殑 浣嗘槸榪欎釜瀹忔湰韜涓嶈兘鍜屽叾瀹冩枃浠朵腑瀹氫箟鐨勫畯閲嶅 鎵浠MFC鍦ㄨ嚜鍔ㄧ敓鎴愮殑鏂囦歡涓鎬繪槸浣跨敤涓涓闅忔満浜х敓鐨勯暱搴﹂潪甯擱暱鐨勫畯 浣嗘垜瑙夊緱榪欐病鏈夊繀瑕 鎴戝緩璁鍦ㄨ繖涓瀹忎腑鍔犲叆涓浜涙湁鎰忎箟鐨勪俊鎮 姣旀柟浣滆 鏂囦歡鍚 鏂囦歡鍒涘緩鏃墮棿絳夌瓑 鍥犱負鎴戜滑鏈夋椂鍊欎細蹇樿板湪娉ㄩ噴涓鍔犲叆榪欎簺淇℃伅

銆銆鍦╒C Net 涓鎴戜滑涓嶄細鍐嶇湅瑙佽繖浜涘畯瀹氫箟浜 鍥犱負鍦ㄨ繖閲屼細鏅閬嶄嬌鐢ㄤ竴涓棰勫勭悊鎸囦護

銆銆#pragma once

銆銆鍙瑕佸湪澶存枃浠剁殑鏈寮濮嬪姞鍏ヨ繖鏉℃寚浠ゅ氨鑳藉熶繚璇佸ご鏂囦歡琚緙栬瘧涓嬈 榪欐潯鎸囦護瀹為檯涓婂湪VC 涓灝卞凡緇忔湁浜 浣嗘槸鑰冭檻鍒板吋瀹規у苟娌℃湁澶澶氱殑浣跨敤瀹

銆銆 婧愪唬鐮佺増鏈鎺у埗

銆銆褰撴垜浠涓鴻稿氬鉤鍙板紑鍙戝氫釜鐗堟湰鐨勬椂鍊欓勭紪璇戞寚浠ゅ拰瀹忓畾涔変篃鑳藉熷府鎴戜滑鐨勫繖 鍋囪炬垜浠鐜板湪涓篧INDOWS 鍜孡INUX寮鍙戜簡涓濂楄蔣浠 鐢變簬榪欎袱縐嶇郴緇熺殑涓嶅悓 鎴戜滑涓嶅緱涓嶅湪紼嬪簭鎺у埗婧愪唬鐮佺殑鐗堟湰 姣旀柟鍐呭瓨鐨勫垎閰 鎴戜滑鍙浠ュ湪LINUX涓婁嬌鐢ㄦ爣鍑咰鐨刴alloc 鍑芥暟 浣嗘槸鎴戜滑甯屾湜鍦 WINDOWS涓婁嬌鐢℉eapAlloc API 涓嬮潰鐨勪唬鐮佹紨紺轟簡榪欑嶆儏鍐

銆銆main錛堬級

銆銆{

銆銆鈥︹︹︹︹︹︹︹

銆銆#ifdef _WINDOWS_PLATFORM

銆銆HeapAlloc錛 錛

銆銆#else

銆銆malloc錛 錛

銆銆#endif

銆銆鈥︹︹︹︹︹︹︹

銆銆}

銆銆褰撴垜浠鍦╓INDOWS 騫沖彴涓婄紪璇戞ょ▼搴忕殑鏃跺 鍙闇瑕佸畾涔塤WINDOWS_PLATFORM榪欎釜瀹 閭d箞HeapAlloc榪欐潯璇鍙ュ氨鑳藉熻搗浣滅敤浜 榪欐牱灝辮兘澶熻╂垜浠鍦ㄥ悓涓涓鏂囦歡涓涓轟笉鍚岀殑騫沖彴瀹炵幇涓嶅悓鐗堟湰鐨勪唬鐮 鍚屾椂淇濇寔紼嬪簭鐨勮壇濂界粨鏋 鍦ㄨ稿氭儏鍐典笅 鎴戜滑榪樺彲浠ヤ負涓涓鏂規硶浣跨敤涓嶅悓鐨勭畻娉 鐒跺悗鐢ㄥ畯瀹氫箟鏉ラ拡瀵逛笉鍚岀殑鎯呭喌閫夋嫨鍏朵腑鐨勪竴涓榪涜岀紪璇 榪欏湪MFC搴旂敤紼嬪簭涓鏄浣跨敤寰楁渶澶氱殑 鏈鏄庢樉鐨勫氨鏄鏂囦歡涓緇忓父瀛樺湪鐨

銆銆#ifdef _DEBUG

銆銆鈥︹︹︹︹︹︹︹ some code鈥︹︹︹︹

銆銆#endif

銆銆榪欐牱鐨勪唬鐮 榪欎簺浠g爜鍦ㄥ簲鐢ㄧ▼搴忕殑璋冭瘯鐗堬紙DEBUG錛変腑浼氬彂鎸ュ叾浣滅敤

銆銆#Pragma 鎸囦護

銆銆鍦ㄦ墍鏈夌殑棰勫勭悊鎸囦護涓 #Pragma 鎸囦護鍙鑳芥槸鏈澶嶆潅鐨勪簡 瀹冪殑浣滅敤鏄璁懼畾緙栬瘧鍣ㄧ殑鐘舵佹垨鑰呮槸鎸囩ず緙栬瘧鍣ㄥ畬鎴愪竴浜涚壒瀹氱殑鍔ㄤ綔 鍏舵牸寮忎竴鑸涓

銆銆#Pragma Para

銆銆鍏朵腑Para 涓哄弬鏁 涓嬮潰鏉ョ湅涓浜涘父鐢ㄧ殑鍙傛暟

銆銆message 鍙傛暟 Message 鍙傛暟鏄鎴戞渶鍠滄㈢殑涓涓鍙傛暟 瀹冭兘澶熷湪緙栬瘧淇℃伅杈撳嚭紿楀彛涓杈撳嚭鐩稿簲鐨勪俊鎮 榪欏逛簬婧愪唬鐮佷俊鎮鐨勬帶鍒舵槸闈炲父閲嶈佺殑 鍏朵嬌鐢ㄦ柟娉曚負

銆銆#Pragma message錛 娑堟伅鏂囨湰 錛

銆銆褰撶紪璇戝櫒閬囧埌榪欐潯鎸囦護鏃跺氨鍦ㄧ紪璇戣緭鍑虹獥鍙d腑灝嗘秷鎮鏂囨湰鎵撳嵃鍑烘潵

銆銆褰撴垜浠鍦ㄧ▼搴忎腑瀹氫箟浜嗚稿氬畯鏉ユ帶鍒舵簮浠g爜鐗堟湰鐨勬椂鍊 鎴戜滑鑷宸辨湁鍙鑳介兘浼氬繕璁版湁娌℃湁姝g『鐨勮劇疆榪欎簺瀹 姝ゆ椂鎴戜滑鍙浠ョ敤榪欐潯鎸囦護鍦ㄧ紪璇戠殑鏃跺欏氨榪涜屾鏌 鍋囪炬垜浠甯屾湜鍒ゆ柇鑷宸辨湁娌℃湁鍦ㄦ簮浠g爜鐨勪粈涔堝湴鏂瑰畾涔変簡_X 榪欎釜瀹忓彲浠ョ敤涓嬮潰鐨勬柟娉

銆銆#ifdef _X

銆銆#Pragma message錛 _X macro activated錛 錛

銆銆#endif

銆銆褰撴垜浠瀹氫箟浜哶X 榪欎釜瀹忎互鍚 搴旂敤紼嬪簭鍦ㄧ紪璇戞椂灝變細鍦ㄧ紪璇戣緭鍑虹獥鍙i噷鏄劇ず _X macro activated錛 鎴戜滑灝變笉浼氬洜涓轟笉璁板緱鑷宸卞畾涔夌殑涓浜涚壒瀹氱殑瀹忚屾姄鑰蟲尃鑵浜

銆銆鍙︿竴涓浣跨敤寰楁瘮杈冨氱殑pragma鍙傛暟鏄痗ode_seg 鏍煎紡濡

銆銆#pragma code_seg錛 [ section name [ section class ] ] 錛

銆銆瀹冭兘澶熻劇疆紼嬪簭涓鍑芥暟浠g爜瀛樻斁鐨勪唬鐮佹 褰撴垜浠寮鍙戦┍鍔ㄧ▼搴忕殑鏃跺欏氨浼氫嬌鐢ㄥ埌瀹

銆銆鏈鍚庝竴涓姣旇緝甯哥敤鐨勫氨鏄涓婇潰鎵璇寸殑#pragma once 鎸囦護浜

銆銆 VC棰勫畾涔夌殑瀹

銆銆鍦╒C涓鏈変竴綾誨畯騫朵笉鏄鐢辯敤鎴風敤#define璇鍙ュ畾涔夌殑 鑰屾槸緙栬瘧鍣ㄦ湰韜灝辮兘澶熻瘑鍒瀹冧滑 榪欎簺瀹忕殑浣滅敤涔熸槸鐩稿綋澶х殑 璁╂垜浠鏉ョ湅絎涓涓 涔熸槸MFC涓浣跨敤寰楁渶棰戠箒鐨勪竴涓 __FILE__

銆銆褰撶紪璇戝櫒閬囧埌榪欎釜瀹忔椂灝辨妸瀹冨睍寮鎴愬綋鍓嶈緙栬瘧鏂囦歡鐨勬枃浠跺悕 濂戒簡 鎴戜滑椹涓婂氨鍙浠ユ兂鍒板彲浠ョ敤瀹冩潵鍋氫粈涔 褰撳簲鐢ㄧ▼搴忓彂鐢熼敊璇鏃 鎴戜滑鍙浠ユ姤鍛婅繖涓閿欒鍙戠敓鐨勭▼搴忎唬鐮佸湪鍝涓鏂囦歡閲 姣旀柟鍦ㄦ枃浠秚est cpp涓鏈夎繖鏍風殑浠g爜

銆銆try

銆銆{

銆銆char * p=new錛坈har[ ]錛

銆銆}

銆銆catch錛圕Exception *e 錛

銆銆{

銆銆TRACE錛 there is an error in file %s __FILE__錛

銆銆}

銆銆鍦ㄧ▼搴忚繍琛岀殑鏃跺 濡傛灉鍐呭瓨鍒嗛厤鍑虹幇浜嗛敊璇 閭d箞鍦ㄨ皟璇曠獥鍙d腑浼氬嚭鐜皌here is an error in file test cpp 榪欏彞璇 褰撶劧 鎴戜滑榪樺彲浠ユ妸榪欎釜閿欒淇℃伅鏄劇ず鍦ㄥ埆鐨勫湴鏂

銆銆濡傛灉鎴戜滑榪樿兘澶熻板綍閿欒鍙戠敓鍦ㄥ摢涓琛屽氨濂戒簡 騫歌繍鐨勬槸 涓巁_FILE__瀹忓畾涔変竴鏍 榪樻湁涓涓瀹忚板綍浜嗗綋鍓嶄唬鐮佹墍鍦ㄧ殑琛屾暟 榪欎釜瀹忔槸__LINE__ 浣跨敤涓婇潰鐨勪袱涓瀹 鎴戜滑鍙浠ュ啓鍑轟竴涓綾諱技浜嶸C鎻愪緵鐨凙SSERT璇鍙 涓嬮潰鏄鏂規硶

銆銆#define MyAssert錛坸錛

銆銆if錛堬紒錛坸錛夛級

銆銆MessageBox錛坃_FILE__ __LINE__ NULL MB_OK錛

銆銆鎴戜滑鍦ㄥ簲鐢ㄧ▼搴忎腑鍙浠ヨ薄浣跨敤ASSERT璇鍙ヤ竴鏍蜂嬌鐢ㄥ畠 鍦ㄩ敊璇鍙戠敓鏃 瀹冧細寮瑰嚭涓涓瀵硅瘽妗 鍏舵爣棰樺拰鍐呭瑰憡璇変簡鎴戜滑閿欒鍙戠敓鐨勬枃浠跺拰浠g爜琛屽彿 鏂逛究鎴戜滑鐨勮皟璇 榪欏逛簬涓嶈兘浣跨敤ASSERT璇鍙ョ殑欏圭洰鏉ヨ存槸闈炲父鏈夌敤鐨

銆銆闄や簡榪欎袱涓瀹忎互澶 榪樻湁璁板綍緙栬瘧鏃墮棿鐨刜_TIME__ 璁板綍鏃ユ湡鐨刜_DATE__ 浠ュ強璁板綍鏂囦歡淇鏀規椂闂寸殑__TIMESTAMP__瀹

銆銆浣跨敤榪欎簺棰勫畾涔夌殑瀹 鎴戜滑鍑犱箮鍙浠ョ敓鎴愬拰VC鑳藉熺敓鎴愮殑涓鏍峰畬鏁寸殑婧愪唬鐮佷俊鎮鎶ヨ〃

銆銆 緇撹

lishixin/Article/program/net/201311/13360

2. C語言的宏(macro)是什麼怎樣使用宏

#define VERSION—STAMP "1.02" 上例中所定義的這種形式的宏通常被稱為標識符。在上例中,標識符VERSION_STAMP即代表字元串"1.02"——在編譯預處理時,源代碼中的每個VERSION_STAMP標識符都將被字元串「1.02」替換掉。 以下是另一個宏定義的例子: #define CUBE(x)((x),(x)*(x)) 上例中定義了一個名為CUBE的宏,它有一個參數x。CUBE宏有自己的宏體,即((x)*(x)*(x))——在編譯預處理時,源代碼中的每個CUBE(x)宏都將被((x)*(x)*(x))替換掉。 使用宏有以下幾點好處: (1)在輸入源代碼時,可省去許多鍵入操作。 (2)因為宏只需定義一次,但可以多次使用,所以使用宏能增強程序的易讀性和可靠性。 (3)使用宏不需要額外的開銷,因為宏所代表的代碼只在宏出現的地方展開,因此不會引起程序中的跳轉。 (4)宏的參數對類型不敏感,因此你不必考慮將何種數據類型傳遞給宏。 需要注意的是,在宏名和括起參數的括弧之間絕對不能有空格。此外,為了避免在翻譯宏時產生歧義,宏體也應該用括弧括起來。例如,象下例中這樣定義CUBE宏是不正確的: denne CUBE(x) x * x * x 對傳遞給宏的參數也要小心,例如,一種常見的錯誤就是將自增變數傳遞給宏,請看下例: #include <stdio. h> #include CUBE(x) (x * x * x) void main (void); void main (void){int x, y;x = 5;y = CUBE( + +x); printfC'y is %d\n" . y);}在上例中,y究竟等於多少呢?實際上,y既不等於125(5的立方),也不等於336(6* 7*8),而是等於512。因為變數x被作為參數傳遞給宏時進行了自增運算,所以上例中的CUBE宏實際上是按以下形式展開的: y = ((++x) * (++x) * (++x)); 這樣,每次引用x時,x都要自增,所以你得到的結果與你預期的結果相差很遠,在上例中,由於x被引用了3次,而且又使用了自增運算符,因此,在展開宏的代碼時,x實際上為8,你將得到8的立方,而不5的立方。 上述錯誤是比較常見的,作者曾親眼見過有多年C語言編程經驗的人犯這種錯誤。因為在程序中檢查這種錯誤是非常費勁的,所以你要給予充分的注意。你最好試一下上面的例子,親眼看一下那個令人驚訝的結果值(512)。 宏也可使用一些特殊的運算符,例如字元串化運算符「#」和。連接運算符「##」。「#」運算符能將宏的參數轉換為帶雙引號的字元串,請看下例: define DEBUG_VALUE(v) printf(#v"is equal to %d.\n",v) 你可以在程序中用DEBUG_VALUE宏檢查變數的值,請看下例: int x=20; DEBUG_VALUE(x); 上述語句將在屏幕上列印"x is equal to 20"。這個例子說明,宏所使用的「#」運算符是一種非常方便的調試工具。 「##」運算符的作用是將兩個獨立的字元串連接成一個字元串。

熱點內容
androidactivity事件 發布:2025-09-14 18:09:43 瀏覽:707
文件夾名字透明 發布:2025-09-14 18:02:37 瀏覽:488
計算機退出域之後密碼是什麼 發布:2025-09-14 17:53:00 瀏覽:997
美猴雲伺服器 發布:2025-09-14 17:51:29 瀏覽:755
編譯預處理時列印宏的值 發布:2025-09-14 17:11:53 瀏覽:73
linuxvim插件 發布:2025-09-14 17:11:04 瀏覽:953
linux導航 發布:2025-09-14 17:08:57 瀏覽:512
問道登陸器源碼 發布:2025-09-14 17:08:01 瀏覽:915
為什麼安卓手機總是提示軟體停運 發布:2025-09-14 17:01:27 瀏覽:973
破解exe加密視頻軟體 發布:2025-09-14 16:44:18 瀏覽:291