ä¸.
#defineæ¯Cè¯è¨ä¸æä¾çå®å®ä¹å½ä»¤ï¼å
¶ä¸»è¦ç®çæ¯ä¸ºç¨åºåå¨ç¼ç¨æ¶æä¾ä¸å®çæ¹ä¾¿ï¼å¹¶è½å¨ä¸å®ç¨åº¦ä¸æé«ç¨åºçè¿è¡æçï¼ä½å¦çå¨å¦ä¹ æ¶å¾å¾ä¸è½ç解该å½ä»¤çæ¬è´¨ï¼æ»æ¯å¨æ¤å¤äº§çä¸äºå°æï¼å¨ç¼ç¨æ¶è¯¯ç¨è¯¥å½ä»¤ï¼ä½¿å¾ç¨åºçè¿è¡ä¸é¢æçç®çä¸ä¸è´ï¼æè
å¨è¯»å«äººåçç¨åºæ¶ï¼æè¿è¡ç»æç解é误ï¼è¿å¯¹ Cè¯è¨çå¦ä¹ å¾ä¸å©ã
1ã#defineå½ä»¤åæ
1.1 #defineçæ¦å¿µ
#defineå½ä»¤æ¯Cè¯è¨ä¸çä¸ä¸ªå®å®ä¹å½ä»¤ï¼å®ç¨æ¥å°ä¸ä¸ªæ è¯ç¬¦å®ä¹ä¸ºä¸ä¸ªå符串ï¼è¯¥æ è¯ç¬¦è¢«ç§°ä¸ºå®åï¼è¢«å®ä¹çå符串称为æ¿æ¢ææ¬ã
该å½ä»¤æ两ç§æ ¼å¼ï¼ä¸ç§æ¯ç®åçå®å®ä¹ï¼å¦ä¸ç§æ¯å¸¦åæ°çå®å®ä¹ã
(1) ç®åçå®å®ä¹ï¼
#define <å®å>ãã<å符串>
ä¾ï¼ #define PI 3.1415926
(2) 带åæ°çå®å®ä¹
#define <å®å> (<åæ°è¡¨>) <å®ä½>
ä¾ï¼ #define A(x) x
ä¸ä¸ªæ è¯ç¬¦è¢«å®å®ä¹åï¼è¯¥æ è¯ç¬¦ä¾¿æ¯ä¸ä¸ªå®åãè¿æ¶ï¼å¨ç¨åºä¸åºç°çæ¯å®åï¼å¨è¯¥ç¨åºè¢«ç¼è¯åï¼å
å°å®åç¨è¢«å®ä¹çå符串æ¿æ¢ï¼è¿ç§°ä¸ºå®æ¿æ¢ï¼æ¿æ¢åæè¿è¡ç¼è¯ï¼å®æ¿æ¢æ¯ç®åçæ¿æ¢ã
1.2 å®æ¿æ¢åççæ¶æº
为äºè½å¤çæ£ç解#defineçä½ç¨ï¼è®©æ们æ¥äºè§£ä¸ä¸å¯¹Cè¯è¨æºç¨åºçå¤çè¿ç¨ãå½æ们å¨ä¸ä¸ªéæçå¼åç¯å¢å¦Turbo Cä¸å°ç¼å好çæºç¨åºè¿è¡ç¼è¯æ¶ï¼å®é
ç»è¿äºé¢å¤çãç¼è¯ãæ±ç¼åè¿æ¥å 个è¿ç¨ï¼è§å¾1ã æºç¨åº é¢å¤çå¨ ä¿®æ¹åçæºç¨åº ç¼è¯å¨ æ±ç¼ç¨åº æ±ç¼å¨ å¯éå®ä½çç®æ ç¨åº è¿æ¥å¨ å¯æ§è¡çç®æ ç¨åº å¾1ãCè¯è¨çç¼è¯è¿ç¨ å
¶ä¸é¢å¤çå¨äº§çç¼è¯å¨çè¾åºï¼å®å®ç°ä»¥ä¸çåè½ï¼
ï¼1ï¼ æ件å
å«
å¯ä»¥ææºç¨åºä¸ç#include æ©å±ä¸ºæ件æ£æï¼å³æå
å«ç.hæ件æ¾å°å¹¶å±å¼å°#include æå¨å¤ã
ï¼2ï¼ æ¡ä»¶ç¼è¯
é¢å¤çå¨æ ¹æ®#ifå#ifdefçç¼è¯å½ä»¤åå
¶åçæ¡ä»¶ï¼å°æºç¨åºä¸çæé¨åå
å«è¿æ¥ææé¤å¨å¤ï¼é常ææé¤å¨å¤çè¯å¥è½¬æ¢æ空è¡ã
ï¼3ï¼ å®å±å¼
é¢å¤çå¨å°æºç¨åºæ件ä¸åºç°ç对å®çå¼ç¨å±å¼æç¸åºçå® å®ä¹ï¼å³æ¬ææ说ç#defineçåè½ï¼ç±é¢å¤çå¨æ¥å®æã
ç»è¿é¢å¤çå¨å¤ççæºç¨åºä¸ä¹åçæºç¨åºæææä¸åï¼å¨è¿ä¸ªé¶æ®µæè¿è¡çå·¥ä½åªæ¯çº¯ç²¹çæ¿æ¢ä¸å±å¼ï¼æ²¡æä»»ä½è®¡ç®åè½ï¼æ以å¨å¦ä¹ #defineå½ä»¤æ¶åªè¦è½çæ£ç解è¿ä¸ç¹ï¼è¿æ ·æä¸ä¼å¯¹æ¤å½ä»¤å¼èµ·è¯¯è§£å¹¶è¯¯ç¨ã
2ã#define使ç¨ä¸ç常è§é®é¢è§£æ
2.1 ç®åå®å®ä¹ä½¿ç¨ä¸åºç°çé®é¢
å¨ç®åå®å®ä¹ç使ç¨ä¸ï¼å½æ¿æ¢ææ¬æ表示çå符串为ä¸ä¸ªè¡¨è¾¾å¼æ¶ï¼å®¹æå¼èµ·è¯¯è§£å误ç¨ãå¦ä¸ä¾ï¼
ä¾1 #define N 2+2
void main()
{
int a=N*N;
printf(â%dâ,a);
}
(1) åºç°é®é¢ï¼å¨æ¤ç¨åºä¸åå¨çå®å®ä¹å½ä»¤ï¼å®N代表çå符串æ¯2+2ï¼å¨ç¨åºä¸æ对å®Nç使ç¨ï¼ä¸è¬åå¦å¨è¯»è¯¥ç¨åºæ¶ï¼å®¹æ产ççé®é¢æ¯å
æ±è§£N为2ï¼2ï¼4ï¼ç¶åå¨ç¨åºä¸è®¡ç®aæ¶ä½¿ç¨ä¹æ³ï¼å³N*N=4*4=16,å
¶å®è¯¥é¢çç»æ为8ï¼ä¸ºä»ä¹ç»ææè¿ä¹å¤§çåå·®?
(2)é®é¢è§£æï¼å¦1èæè¿°ï¼å®å±å¼æ¯å¨é¢å¤çé¶æ®µå®æçï¼è¿ä¸ªé¶æ®µææ¿æ¢ææ¬åªæ¯çä½ä¸ä¸ªå符串ï¼å¹¶ä¸ä¼æä»»ä½ç计ç®åçï¼å¨å±å¼æ¶æ¯å¨å®Nåºç°çå°æ¹ åªæ¯ç®åå°ä½¿ç¨ä¸²2ï¼2æ¥ä»£æ¿Nï¼å¹¶ä¸ä¼å¢æ·»ä»»ä½ç符å·ï¼æ以对该ç¨åºå±å¼åçç»ææ¯a=2+2*2+2ï¼è®¡ç®å=8ï¼è¿å°±æ¯å®æ¿æ¢çå®è´¨ï¼å¦ä½åç¨åºæ è½å®æç»æ为16çè¿ç®å¢ï¼
(3)解å³åæ³ï¼å°å®å®ä¹åæå¦ä¸å½¢å¼
#define N (2+2)
è¿æ ·å°±å¯æ¿æ¢æ(2+2)*(2+2)=16
2.2 带åæ°çå®å®ä¹åºç°çé®é¢
å¨å¸¦åæ°çå®å®ä¹ç使ç¨ä¸ï¼ææå¼èµ·è¯¯è§£ãä¾å¦æ们éè¦å个å®æ¿æ¢è½æ±ä»»ä½æ°çå¹³æ¹ï¼è¿å°±éè¦ä½¿ç¨åæ°ï¼ä»¥ä¾¿å¨ç¨åºä¸ç¨å®é
åæ°æ¥æ¿æ¢å®å®ä¹ä¸çåæ°ãä¸è¬å¦ç容æåæå¦ä¸å½¢å¼ï¼
#define area(x) x*x
è¿å¨ä½¿ç¨ä¸æ¯å¾å®¹æåºç°é®é¢çï¼çå¦ä¸çç¨åº
void main()
{
int y=area(2+2);
printf(â%dâ,y);
}
æç说ç»çåæ°æ¯2+2ï¼æå¾çç»æåºè¯¥ä¸º4*4=16ï¼ä½æ¯éäºï¼å 为该ç¨åºçå®é
ç»æ为8ï¼ä»ç¶æ¯æ²¡è½éµå¾ªçº¯ç²¹çç®åæ¿æ¢çè§åï¼åæ¯å
计ç®åæ¿æ¢ äºï¼å¨è¿éç¨åºéï¼2+2å³ä¸ºareaå®ä¸çåæ°ï¼åºè¯¥ç±å®æ¥æ¿æ¢å®å®ä¹ä¸çxï¼å³æ¿æ¢æ2+2*2+2=8äºãé£å¦æéµå¾ª(1)ä¸ç解å³åæ³ï¼æ2+2 æ¬èµ·æ¥ï¼å³æå®ä½ä¸çxæ¬èµ·æ¥ï¼æ¯å¦å¯ä»¥å¢ï¼#define area(x) (x)*(x)ï¼å¯¹äºarea(2+2)ï¼æ¿æ¢ä¸º(2+2)*(2+2)=16ï¼å¯ä»¥è§£å³ï¼ä½æ¯å¯¹äºarea(2+2)/area(2+2)åä¼æä¹æ ·å¢ï¼æçå¦çä¸çå°è¿éé¢é©¬ä¸ç»åºç»æï¼å 为åååæ¯ä¸æ ·ï¼åéäºï¼è¿æ¯å¿äºéµå¾ªå
æ¿æ¢å计ç®çè§åäºï¼è¿éé¢æ¿æ¢åä¼å为(2+2)*(2+2)/(2+2)*(2+2)å³4*4/4*4æç
§ä¹é¤è¿ç®è§åï¼ç»æ为16/4*4=4*4=16ï¼é£åºè¯¥æä¹å¢ï¼è§£å³æ¹æ³æ¯å¨æ´ä¸ª å®ä½ä¸åå ä¸ä¸ªæ¬å·ï¼å³#define area(x) ((x)*(x))ï¼ä¸è¦è§å¾è¿æ²¡å¿
è¦ï¼æ²¡æå®ï¼æ¯ä¸è¡çã
è¦æ³è½å¤çæ£ä½¿ç¨å¥½å®å®ä¹ï¼é£ä¹å¨è¯»å«äººçç¨åºæ¶ï¼ä¸å®è¦è®°ä½å
å°ç¨åºä¸å¯¹å®ç使ç¨å
¨é¨æ¿æ¢æå®æ代表çå符串ï¼ä¸è¦èªä½ä¸»å¼ å°æ·»å ä»»ä½å
¶ä»ç¬¦å·ï¼å®å
¨å±å¼ååè¿è¡ç¸åºç计ç®ï¼å°±ä¸ä¼åéè¿è¡ç»æãå¦ææ¯èªå·±ç¼ç¨ä½¿ç¨å®æ¿æ¢ï¼åå¨ä½¿ç¨ç®åå®å®ä¹æ¶ï¼å½å符串ä¸ä¸åªä¸ä¸ªç¬¦å·æ¶ï¼å ä¸æ¬å·è¡¨ç°åºä¼å
级ï¼å¦ææ¯ å¸¦åæ°çå®å®ä¹ï¼åè¦ç»å®ä½ä¸çæ¯ä¸ªåæ°å ä¸æ¬å·ï¼å¹¶å¨æ´ä¸ªå®ä½ä¸åå ä¸ä¸ªæ¬å·ãçå°è¿éï¼ä¸ç¦è¦é®ï¼ç¨å®å®ä¹è¿ä¹éº»ç¦ï¼è¿ä¹å®¹æåºéï¼å¯ä¸å¯ä»¥æå¼å®ï¼é£è®©æ们æ¥çä¸ä¸å¨Cè¯è¨ä¸ç¨å®å®ä¹ç好å¤å§ã
3 å®å®ä¹çä¼ç¹
(1) æ¹ä¾¿ç¨åºçä¿®æ¹
使ç¨ç®åå®å®ä¹å¯ç¨å®ä»£æ¿ä¸ä¸ªå¨ç¨åºä¸ç»å¸¸ä½¿ç¨ç常éï¼è¿æ ·å¨å°è¯¥å¸¸éæ¹åæ¶ï¼ä¸ç¨å¯¹æ´ä¸ªç¨åºè¿è¡ä¿®æ¹ï¼åªä¿®æ¹å®å®ä¹çå符串å³å¯ï¼èä¸å½å¸¸éæ¯è¾é¿æ¶ï¼æ们å¯ä»¥ç¨è¾ççææä¹çæ è¯ç¬¦æ¥åç¨åºï¼è¿æ ·æ´æ¹ä¾¿ä¸äºãæ们æ说ç常éæ¹åä¸æ¯å¨ç¨åºè¿è¡æé´æ¹åï¼èæ¯å¨ç¼ç¨æé´çä¿®æ¹ï¼ä¸¾ä¸ä¸ªå¤§å®¶æ¯è¾çæçä¾ åï¼åå¨çÏæ¯å¨æ°å¦ä¸å¸¸ç¨çä¸ä¸ªå¼ï¼ææ¶æ们ä¼ç¨3.14æ¥è¡¨ç¤ºï¼ææ¶ä¹ä¼ç¨3.1415926çï¼è¿è¦ç计ç®æéè¦ç精度ï¼å¦ææ们ç¼å¶çä¸ä¸ªç¨åºä¸ è¦å¤æ¬¡ä½¿ç¨å®ï¼é£ä¹éè¦ç¡®å®ä¸ä¸ªæ°å¼ï¼å¨æ¬æ¬¡è¿è¡ä¸ä¸æ¹åï¼ä½ä¹è®¸åæ¥åç°ç¨åºæ表ç°ç精度æååï¼éè¦æ¹åå®çå¼ï¼è¿å°±éè¦ä¿®æ¹ç¨åºä¸ææçç¸å
³æ°å¼ï¼è¿ä¼ç»æ们带æ¥ä¸å®çä¸ä¾¿ï¼ä½å¦æ使ç¨å®å®ä¹ï¼ä½¿ç¨ä¸ä¸ªæ è¯ç¬¦æ¥ä»£æ¿ï¼åå¨ä¿®æ¹æ¶åªä¿®æ¹å®å®ä¹å³å¯ï¼è¿å¯ä»¥åå°è¾å
¥ 3.1415926è¿æ ·é¿çæ°å¼å¤æ¬¡çæ
åµï¼æ们å¯ä»¥å¦æ¤å®ä¹#define pi 3.1415926ï¼æ¢åå°äºè¾å
¥å便äºä¿®æ¹ï¼ä½ä¹èä¸ä¸ºå¢ï¼
(2) æé«ç¨åºçè¿è¡æç
使ç¨å¸¦åæ°çå®å®ä¹å¯å®æå½æ°è°ç¨çåè½ï¼åè½åå°ç³»ç»å¼ éï¼æé«è¿è¡æçãæ£å¦Cè¯è¨ä¸æ讲ï¼å½æ°ç使ç¨å¯ä»¥ä½¿ç¨åºæ´å 模ååï¼ä¾¿äºç»ç»ï¼èä¸å¯éå¤å©ç¨ï¼ä½å¨åçå½æ°è°ç¨æ¶ï¼éè¦ä¿çè°ç¨å½æ°çç°åºï¼ä»¥ä¾¿åå½æ°æ§è¡ç»æåè½è¿å继ç»æ§è¡ï¼åæ ·å¨åå½æ°æ§è¡å®åè¦æ¢å¤è°ç¨å½æ°çç°åºï¼è¿é½éè¦ä¸å®çæ¶é´ï¼å¦æåå½æ°æ§è¡çæä½æ¯è¾å¤ï¼è¿ç§è½¬æ¢æ¶é´å¼éå¯ä»¥å¿½ ç¥ï¼ä½å¦æåå½æ°å®æçåè½æ¯è¾å°ï¼çè³äºåªå®æä¸ç¹æä½ï¼å¦ä¸ä¸ªä¹æ³è¯å¥çæä½ï¼åè¿é¨å转æ¢å¼éå°±ç¸å¯¹è¾å¤§äºï¼ä½ä½¿ç¨å¸¦åæ°çå®å®ä¹å°±ä¸ä¼åºç°è¿ä¸ªé®é¢ï¼å 为å®æ¯å¨é¢å¤çé¶æ®µå³è¿è¡äºå®å±å¼ï¼å¨æ§è¡æ¶ä¸éè¦è½¬æ¢ï¼å³å¨å½å°æ§è¡ãå®å®ä¹å¯å®æç®åçæä½ï¼ä½å¤æçæä½è¿æ¯è¦ç±å½æ°è°ç¨æ¥å®æï¼èä¸å®å®ä¹ æå ç¨çç®æ 代ç 空é´ç¸å¯¹è¾å¤§ãæ以å¨ä½¿ç¨æ¶è¦ä¾æ®å
·ä½æ
åµæ¥å³å®æ¯å¦ä½¿ç¨å®å®ä¹ã
4 ç»è¯
æ¬æ对Cè¯è¨ä¸å®å®ä¹#defineå¨ä½¿ç¨æ¶å®¹æåºç°çé®é¢è¿è¡äºè§£æï¼å¹¶ä»Cæºç¨åºå¤çè¿ç¨çè§åº¦å¯¹#defineçå¤çè¿è¡äºåæï¼ä¹å¯¹å®çä¼ç¹è¿è¡ äºéè¿°ãåªè¦è½å¤ç解å®å±å¼çè§åï¼ææ¡ä½¿ç¨å®å®ä¹æ¶ï¼æ¯å¨é¢å¤çé¶æ®µå¯¹æºç¨åºè¿è¡æ¿æ¢ï¼åªæ¯ç¨å¯¹åºçå符串æ¿æ¢ç¨åºä¸åºç°çå®åï¼è¿æ ·å°±å¯å¨æ£ç¡®ä½¿ç¨çåºç¡ä¸å
å享å使ç¨å®å®ä¹å¸¦æ¥çæ¹ä¾¿åæçäº
äº.
æè¿çcomç¸å
³çèµæï¼çå°CCmdTargetå®ç°comæ¥å£çæ¶åï¼å»è¯»äºä¸äºå®çå®ä¹ï¼å¨afxdisp.h头æ件ä¸
#define BEGIN_INTERFACE_PART(localClass, baseClass) \
class X##localClass : public baseClass \
æ¬æ¥è¿ä¸ªå®å®ä¹å¾å®¹æç解çï¼ä½æ¯è¿éå¤åºä¸ªX##ï¼æç没è§è¿è¿ç§ç¨æ³ï¼ä¸æå¾å®æ¯ä»ä¹ç¨æã
åæ¥é®äºå 个æåä¹é½ä¸ç¥éã
ä½ ç¥éä¹ï¼
ä¹è®¸ä½ ä¹ä¸ç¥éï½åµåµï¼æåæè¿æ¯æ¾å°äºç¸å
³çèµæï¼è§£è¯»äºè¿ä¸ªdefineï¼è¿é¡ºä¾¿è®¤è¯äºå¦å¤ä¸¤ä¸ªä¸å¸¸ç¨çdefine
#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x
x##y表示ä»ä¹ï¼è¡¨ç¤ºxè¿æ¥yï¼ä¸¾ä¾è¯´ï¼
int n = Conn(123,456); ç»æå°±æ¯n=123456;
char* str = Conn("asdf", "adf")ç»æå°±æ¯str = "asdfadf";
æä¹æ ·ï¼å¾ç¥å¥å§
åæ¥ç#@xï¼å
¶å®å°±æ¯ç»xå ä¸åå¼å·ï¼ç»æè¿åæ¯ä¸ä¸ªconst charã举ä¾è¯´ï¼
char a = ToChar(1);ç»æå°±æ¯a='1';
å个è¶çè¯éªchar a = ToChar(123);ç»ææ¯a='3';
ä½æ¯å¦æä½ çåæ°è¶
è¿å个å符ï¼ç¼è¯å¨å°±ç»ç»ä½ æ¥éäºï¼error C2015: too manycharacters in constant ï¼P
æåçç#x,ä¼°è®¡ä½ ä¹æç½äºï¼ä»æ¯ç»xå åå¼å·
char* str = ToString(123132);å°±æäºstr="123132";
æåçå 个å°è¯éªç»å¤§å®¶å»æµæµï¼
#define Dec(x,y) (x-y)
int n = Dec( A(123,1), 1230);
n = Conn(123, Conn(123,332) );
char* str = A("12", ToString( Dec(3,1));
ç»æä¼å¦ä½å¢ï¼ å¿å¿å¿å¿~
ä¸.
#define xxx() {}
æ åCæ¯æç
#define xxx() ({})
GCCæ°å¢çåè½ï¼ä¸»è¦ä¸ºäºé²æ¢å®å±å¼åºç°é®é¢ï¼é»è®¤å±å¼æ¶æ¯è¦å ä¸ä¸ä¸ª;çï¼å®¹æåºé®é¢ã
CODE:#define A(a,b,c) ({a=1;b+=1;c=3;a+b+c;})
#include <stdio.h>
int main()
{
int a;
int b=1;
int c;
int d;
d=A(a,b,c);
printf("%d,%d,%d,%d\n",a,b,c,d);
return 0;
}
表示该å®å½æ°è¿æè¿åå¼ï¼æåä¸ä¸ªå¼åçè¿åå¼ä½ä¸ºå®å½æ°çè¿åå¼ã
è¿è¡ç»æï¼
1,2,3,6
温馨提示:答案为网友推荐,仅供参考