在程序的一行上可以出现多个有效的预处理命令行。
预处理命令可以出现在函数的内部。
这2句话只有一句是错误的,哪句???
ããCç¨åºçæºä»£ç ä¸å¯å
æ¬åç§ç¼è¯æ令ï¼è¿äºæ令称为é¢å¤çå½ä»¤ãè½ç¶å®ä»¬å®é
ä¸ä¸æ¯Cè¯è¨çä¸é¨åï¼ä½å´æ©å±äºCç¨åºè®¾è®¡çç¯å¢ãæ¬èå°ä»ç»å¦ä½åºç¨é¢å¤çç¨åºå注éç®åç¨åºå¼åè¿ç¨ï¼å¹¶æé«ç¨åºçå¯è¯»æ§ãANSIæ åå®ä¹çCè¯è¨é¢å¤çç¨åºå
æ¬ä¸åå½ä»¤ï¼
ãã#defineï¼#errorï¼ï¼includeï¼#ifï¼#elseï¼#elifï¼#endifï¼#ifdefï¼#ifndefï¼#undefï¼#lineï¼#pragmaçãé常ææ¾ï¼ææé¢å¤çå½ä»¤å以符å·#å¼å¤´ï¼ä¸é¢åå«å 以ä»ç»ã
ããä¸ #define
ããå½ä»¤#defineå®ä¹äºä¸ä¸ªæ è¯ç¬¦åä¸ä¸ªä¸²ãå¨æºç¨åºä¸æ¯æ¬¡éå°è¯¥æ è¯ç¬¦æ¶ï¼å以å®ä¹ç串代æ¢å®ãANSIæ åå°æ è¯ç¬¦å®ä¹ä¸ºå®åï¼å°æ¿æ¢è¿ç¨ç§°ä¸ºå®æ¿æ¢ãå½ä»¤çä¸è¬å½¢å¼ä¸ºï¼
ãã#define identifier string
ãã注æï¼
ãã1该è¯å¥æ²¡æåå·ãå¨æ è¯ç¬¦å串ä¹é´å¯ä»¥æä»»æä¸ªç©ºæ ¼ï¼ä¸²ä¸æ¦å¼å§ï¼ä» ç±ä¸æ°è¡ç»æã
ãã2å®åå®ä¹åï¼å³å¯æä¸ºå ¶å®å®åå®ä¹ä¸çä¸é¨åã
ãã3 å®æ¿æ¢ä» ä» æ¯ä»¥ææ¬ä¸²ä»£æ¿å®æ è¯ç¬¦ï¼åææ¯å®æ è¯ç¬¦å¿ é¡»ç¬ç«çè¯å«åºæ¥ï¼å¦åä¸è¿è¡æ¿æ¢ãä¾å¦ï¼
ãã#define XYZ this is a tes
ãã使ç¨å®printf("XYZ")ï¼//该段ä¸æå°"this is a test"èæå°"XYZ"ãå 为é¢ç¼è¯å¨è¯å«åºçæ¯"XYZ"
ãã4å¦æ串é¿äºä¸è¡ï¼å¯ä»¥å¨è¯¥è¡æ«å°¾ç¨ä¸åææ ' \'ç»è¡ã
ãã#defineLONG_STRING"this is a very long\
ããstring that is used as an example"
ãã5 Cè¯è¨ç¨åºæ®é使ç¨å¤§ååæ¯å®ä¹æ è¯ç¬¦ã
ãã6 ç¨å®ä»£æ¢ä»£æ¿å®å¨çå½æ°çä¸å¤§å¥½å¤æ¯å®æ¿æ¢å¢å äºä»£ç çé度ï¼å 为ä¸åå¨å½æ°è°ç¨çå¼éãä½å¢å é度ä¹æ代价ï¼ç±äºéå¤ç¼ç èå¢å äºç¨åºé¿åº¦ã
ãã
ããäº #error
ããå½ä»¤#error强迫ç¼è¯ç¨åºåæ¢ç¼è¯ï¼ä¸»è¦ç¨äºç¨åºè°è¯ã
ãã#erroræ令使é¢å¤çå¨ååºä¸æ¡é误æ¶æ¯ï¼è¯¥æ¶æ¯å å«æ令ä¸çææ¬.è¿æ¡æ令çç®çå°±æ¯å¨ç¨åºå´©æºä¹åè½å¤ç»åºä¸å®çä¿¡æ¯ã
ããä¸ #include
ããå½ä»¤ï¼i nclude使ç¼è¯ç¨åºå°å¦ä¸æºæ件åµå ¥å¸¦æï¼includeçæºæ件ï¼è¢«è¯»å ¥çæºæä»¶å¿ é¡»ç¨åå¼å·æå°æ¬å·æ¬èµ·æ¥ãä¾å¦ï¼
ããï¼include"stdio.h"æè ï¼include<stdio.h>
ããè¿ä¸¤è¡ä»£ç å使ç¨Cç¼è¯ç¨åºè¯»å ¥å¹¶ç¼è¯ç¨äºå¤çç£çæ件åºçåç¨åºã
ããå°æ件åµå ¥ï¼i ncludeå½ä»¤ä¸çæ件å æ¯å¯è¡çï¼è¿ç§æ¹å¼ç§°ä¸ºåµå¥çåµå ¥æ件ï¼åµå¥å±æ¬¡ä¾èµäºå ·ä½å®ç°ã
ããå¦ææ¾å¼è·¯å¾å为æ件æ è¯ç¬¦çä¸é¨åï¼åä» å¨é£äºåç®å½ä¸æ索被åµå ¥æ件ãå¦åï¼å¦ææ件åç¨åå¼å·æ¬èµ·æ¥ï¼åé¦å æ£ç´¢å½åå·¥ä½ç®å½ãå¦ææªåç°æ件ï¼åå¨å½ä»¤è¡ä¸è¯´æçææç®å½ä¸æç´¢ãå¦æä»æªåç°æ件ï¼åæç´¢å®ç°æ¶å®ä¹çæ åç®å½ã
ããå¦æ没ææ¾å¼è·¯å¾åä¸æ件å被å°æ¬å·æ¬èµ·æ¥ï¼åé¦å å¨ç¼è¯å½ä»¤è¡ä¸çç®å½å æ£ç´¢ãå¦ææ件没æ¾å°ï¼åæ£ç´¢æ åç®å½ï¼ä¸æ£ç´¢å½åå·¥ä½ç®å½ã
ããå æ¡ä»¶ç¼è¯å½ä»¤
ããæå 个å½ä»¤å¯å¯¹ç¨åºæºä»£ç çåé¨åæéæ©å°è¿è¡ç¼è¯ï¼è¯¥è¿ç¨ç§°ä¸ºæ¡ä»¶ç¼è¯ãåä¸è½¯ä»¶å ¬å¸å¹¿æ³åºç¨æ¡ä»¶ç¼è¯æ¥æä¾åç»´æ¤æä¸ç¨åºç许å¤é¡¾å®¢çæ¬ã
ãã#ifã#elseï¼#elifå#endif
ãã#ifçä¸è¬å«ä¹æ¯å¦æ#ifåé¢ç常é表达å¼ä¸ºtrueï¼åç¼è¯å®ä¸#endifä¹é´ç代ç ï¼å¦åè·³è¿è¿äºä»£ç ãå½ä»¤#endifæ è¯ä¸ä¸ª#ifåçç»æã
ãã#if constant-expression
ããstatement sequence
ãã#endif
ããEg:
ãã#define MAX 91
ãã#include <iostream>
ããusing namespace std;
ããint main()
ãã{
ãã#if MAX > 99
ããcout<<"MAX is bigger than 99"<<endl;
ãã#elif MAX > 90
ããcout<<"MAX is bigger than 90"<<endl;
ãã#else
ããcout<<"MAX is smaller than 90"<<endl;
ãã#endif
ããreturn 0;
ãã}
ããè·å¨#ifåé¢ç表达å¼å¨ç¼è¯æ¶æ±å¼ï¼å æ¤å®å¿ é¡»ä» å«å¸¸éåå·²å®ä¹è¿çæ è¯ç¬¦ï¼ä¸å¯ä½¿ç¨åéã表达å¼ä¸è®¸å«ææä½ç¬¦sizeofï¼sizeofä¹æ¯ç¼è¯æ¶æ±å¼ï¼ã
ãã
ãã#elseå½ä»¤çåè½æç¹è±¡Cè¯è¨ä¸çelseï¼#else建ç«å¦ä¸éæ©ï¼å¨#if失败çæ åµä¸ï¼ã注æï¼#elseå±äº#ifåã
ãã
ãã#elifå½ä»¤æä¹ä¸ELSE IF ç¸åï¼å®å½¢æä¸ä¸ªif else-ifé¶æ¢¯ç¶è¯å¥ï¼å¯è¿è¡å¤ç§ç¼è¯éæ©ã#elif åè·ä¸ä¸ªå¸¸é表达å¼ãå¦æ表达å¼ä¸ºtrueï¼åç¼è¯å ¶åç代ç åï¼ä¸å¯¹å ¶å®#elif表达å¼è¿è¡æµè¯ãå¦åï¼é¡ºåºæµè¯ä¸ä¸åã
ãã
ãã#if expression
ããstatement sequence
ãã#elif expression1
ããstatement sequence
ãã#endif
ãã
ããå¨åµå¥çæ¡ä»¶ç¼è¯ä¸#endifã#elseæ#elifä¸æè¿#ifæ#elifå¹é ã
ãã# ifdef å# ifndef
ãã
ããæ¡ä»¶ç¼è¯çå¦ä¸ç§æ¹æ³æ¯ç¨#ifdefä¸#ifndefå½ä»¤ï¼å®ä»¬åå«è¡¨ç¤º"å¦ææå®ä¹"å"å¦ææ å®ä¹"ã# ifdefçä¸è¬å½¢å¼æ¯ï¼
ãã
ãã# ifdef macroname
ããstatement sequence
ãã#endif
ãã
ãã#ifdefä¸#ifndefå¯ä»¥ç¨äº#ifã#elseï¼#elifè¯å¥ä¸ï¼ä½å¿ é¡»ä¸ä¸ä¸ª#endifã
ãã
ãã#define MAX 91
ãã#include <iostream>
ããusing namespace std;
ãã
ããint main()
ãã{
ãã#ifdef MAX
ããcout<<"hello,MAX!"<<endl;
ãã#else
ããcout<<"where is MAX?"<<endl;
ãã#endif
ãã#ifndef LEO
ããcout<<"LEO is not defined"<<endl;
ãã#endif
ããreturn 0;
ãã}
ããå½ä»¤#undef åæ¶å ¶åé£ä¸ªåé¢å·²å®ä¹è¿æå®åå®ä¹ãä¸è¬å½¢å¼ä¸ºï¼
ãã#undef macroname
ããå½ä»¤#lineæ¹å__LINE__ä¸__FILE__çå 容ï¼å®ä»¬æ¯å¨ç¼è¯ç¨åºä¸é¢å å®ä¹çæ è¯ç¬¦ãå½ä»¤çåºæ¬å½¢å¼å¦ä¸ï¼
ãã#line number["filename"]
ããå ¶ä¸çæ°å为任ä½æ£æ´æ°ï¼å¯éçæ件å为任ææææ件æ è¯ç¬¦ãè¡å·ä¸ºæºç¨åºä¸å½åè¡å·ï¼æ件å为æºæ件çååãå½ä»¤#line主è¦ç¨äºè°è¯åå ¶å®ç¹æ®åºç¨ã注æï¼å¨#lineåé¢çæ°åæ è¯ä»ä¸ä¸è¡å¼å§çæ°åæ è¯ã
ãã#line 100 "jia"
ããcout<<"#line change line and filename!"<<endl; //line 100
ããcout<<__LINE__<<endl; //101
ããcout<<__FILE__<<endl; //jia
ããäº #pragma
ããå½ä»¤#pragma 为å®ç°æ¶å®ä¹çå½ä»¤ï¼å®å 许åç¼è¯ç¨åºä¼ éåç§æ令ã
ãã#pragmaçä½ç¨æ¯è®¾å®ç¼è¯å¨çç¶ææè æ¯æ示ç¼è¯å¨å®æä¸äºç¹å®çå¨ä½ã#pragmaæ令对æ¯ä¸ªç¼è¯å¨ç»åºäºä¸ä¸ªæ¹æ³,å¨ä¿æä¸CåC++è¯è¨å®å ¨å ¼å®¹çæ åµä¸,ç»åºä¸»æºææä½ç³»ç»ä¸æçç¹å¾ãä¾æ®å®ä¹,ç¼è¯æ示æ¯æºå¨ææä½ç³»ç»ä¸æç,ä¸å¯¹äºæ¯ä¸ªç¼è¯å¨é½æ¯ä¸åçã
ããå ¶æ ¼å¼ä¸è¬ä¸º: #Pragma Para
ãã1 message åæ°ã
ããMessage åæ°è½å¤å¨ç¼è¯ä¿¡æ¯è¾åºçªå£ä¸è¾åºç¸åºçä¿¡æ¯ï¼è¿å¯¹äºæºä»£ç ä¿¡æ¯çæ§å¶æ¯é常éè¦çãå ¶ä½¿ç¨æ¹æ³ä¸ºï¼
ãã#pragma message(âæ¶æ¯ææ¬â)
ããå½ç¼è¯å¨éå°è¿æ¡æ令æ¶å°±å¨ç¼è¯è¾åºçªå£ä¸å°æ¶æ¯ææ¬æå°åºæ¥ã
ããå½å¨ç¨åºä¸å®ä¹äºè®¸å¤å®æ¥æ§å¶æºä»£ç çæ¬çæ¶åï¼èªå·±æå¯è½é½ä¼å¿è®°æ没ææ£ç¡®ç设置è¿äºå®ï¼æ¤æ¶å¯ä»¥ç¨è¿æ¡æ令å¨ç¼è¯çæ¶åå°±è¿è¡æ£æ¥ãå设å¸æå¤æèªå·±æ没æå¨æºä»£ç çä»ä¹å°æ¹å®ä¹äº_X86è¿ä¸ªå®å¯ä»¥ç¨ä¸é¢çæ¹æ³
ãã#ifdef _X86
ãã#pragma message(â_X86 macro activated!â)
ãã#endif
ããå½å®ä¹äº_X86è¿ä¸ªå®ä»¥åï¼åºç¨ç¨åºå¨ç¼è¯æ¶å°±ä¼å¨ç¼è¯è¾åºçªå£éæ¾ç¤ºâ_
ããX86 macro activated!âãå°±ä¸ä¼å 为ä¸è®°å¾èªå·±å®ä¹çä¸äºç¹å®çå®èæè³æ è ®äºã
ãã2 code_seg åæ°ã
ããæ ¼å¼å¦ï¼
ãã#pragma code_seg( ["section-name"[,"section-class"] ] )
ããå®è½å¤è®¾ç½®ç¨åºä¸å½æ°ä»£ç åæ¾ç代ç 段ï¼å½å¼å驱å¨ç¨åºçæ¶åå°±ä¼ä½¿ç¨å°å®ã
ãã3 #pragma once (æ¯è¾å¸¸ç¨ï¼
ããåªè¦å¨å¤´æ件çæå¼å§å å ¥è¿æ¡æ令就è½å¤ä¿è¯å¤´æ件被ç¼è¯ä¸æ¬¡ãè¿æ¡æ令å®é ä¸å¨VC6ä¸å°±å·²ç»æäºï¼ä½æ¯èèå°å ¼å®¹æ§å¹¶æ²¡æ太å¤ç使ç¨å®ã
ãã4 #pragma hdrstop
ãã表示é¢ç¼è¯å¤´æ件å°æ¤ä¸ºæ¢ï¼åé¢ç头æ件ä¸è¿è¡é¢ç¼è¯ãBCBå¯ä»¥é¢ç¼è¯å¤´æ件以å å¿«é¾æ¥çé度ï¼ä½å¦æææ头æ件é½è¿è¡é¢ç¼è¯åå¯è½å 太å¤ç£ç空é´ï¼æ以使ç¨è¿ä¸ªé项æé¤ä¸äºå¤´æ件ã
ããææ¶åå ä¹é´æä¾èµå ³ç³»ï¼æ¯å¦åå Aä¾èµåå Bï¼æ以åå Bè¦å äºåå Aç¼è¯ãä½ å¯ä»¥ç¨#pragma startupæå®ç¼è¯ä¼å 级ï¼å¦æ使ç¨äº#pragma package(smart_init) ï¼BCBå°±ä¼æ ¹æ®ä¼å 级ç大å°å åç¼è¯ã
ãã5 #pragma resource "*.dfm"
ãã表示æ*.dfmæ件ä¸çèµæºå å ¥å·¥ç¨ã*.dfmä¸å æ¬çªä½å¤è§çå®ä¹ã
ãã6 #pragma warning( disable : 4507 34; once : 4385; error : 164 )
ããçä»·äºï¼
ãã#pragma warning(disable:4507 34) /* ä¸æ¾ç¤º4507å34å·è¦åä¿¡æ¯ãå¦æç¼è¯æ¶æ»æ¯åºç°4507å·è¦åå34å·è¦å, è认为è¯å®ä¸ä¼æé误ï¼å¯ä»¥ä½¿ç¨è¿æ¡æ令ã*/
ãã#pragma warning(once:4385) // 4385å·è¦åä¿¡æ¯ä» æ¥åä¸æ¬¡
ãã#pragma warning(error:164) // æ164å·è¦åä¿¡æ¯ä½ä¸ºä¸ä¸ªé误ã
ããåæ¶è¿ä¸ªpragma warning ä¹æ¯æå¦ä¸æ ¼å¼ï¼
ãã#pragma warning( push [ ,n ] )
ãã#pragma warning( pop )
ããè¿én代表ä¸ä¸ªè¦åç级(1---4)ã
ãã#pragma warning( push )ä¿åææè¦åä¿¡æ¯çç°æçè¦åç¶æã
ãã#pragma warning( push, n)ä¿åææè¦åä¿¡æ¯çç°æçè¦åç¶æï¼å¹¶ä¸æå ¨å±è¦åç级设å®ä¸ºnã
ãã#pragma warning( pop )åæ ä¸å¼¹åºæåä¸ä¸ªè¦åä¿¡æ¯ï¼å¨å ¥æ ååºæ ä¹é´æä½çä¸åæ¹å¨åæ¶ãä¾å¦ï¼
ãã#pragma warning( push )
ãã#pragma warning( disable : 4705 )
ãã#pragma warning( disable : 4706 )
ãã#pragma warning( disable : 4707 )
ãã//.......
ãã#pragma warning( pop )
ããå¨è¿æ®µä»£ç çæåï¼éæ°ä¿åææçè¦åä¿¡æ¯(å æ¬4705ï¼4706å4707)ã
ãã7 pragma comment(...)
ãã该æ令å°ä¸ä¸ªæ³¨éè®°å½æ¾å ¥ä¸ä¸ªå¯¹è±¡æ件æå¯æ§è¡æ件ä¸ã
ãã常ç¨çlibå ³é®åï¼å¯ä»¥å¸®è¿å ¥ä¸ä¸ªåºæ件ã
ãã8 progma packï¼nï¼
ããæå®ç»æä½å¯¹é½æ¹å¼ã#pragma pack(n)æ¥è®¾å®åé以nåè对é½æ¹å¼ã
ããn åè对é½å°±æ¯è¯´åéåæ¾çèµ·å§å°åçå移éæ两ç§æ åµï¼
ãã第ä¸ãå¦æn大äºçäºè¯¥åéæå ç¨çåèæ°ï¼é£ä¹å移éå¿ é¡»æ»¡è¶³é»è®¤ç对é½æ¹å¼ï¼
ãã第äºãå¦ænå°äºè¯¥åéçç±»åæå ç¨çåèæ°ï¼é£ä¹å移é为nçåæ°ï¼ä¸ç¨æ»¡è¶³é»è®¤ç对é½æ¹å¼ã
ããç»æçæ»å¤§å°ä¹æ个约ææ¡ä»¶ï¼åä¸é¢ä¸¤ç§æ åµï¼å¦æn大äºæææååéç±»åæå ç¨çåèæ°ï¼é£ä¹ç»æçæ»å¤§å°å¿ 须为å ç¨ç©ºé´æ大çåéå ç¨ç空é´æ°çåæ°ï¼ å¦åå¿ é¡»ä¸ºnçåæ°ã
ããä¸é¢ä¸¾ä¾è¯´æå ¶ç¨æ³ã
ãã#pragma pack(push) //ä¿å对é½ç¶æ
ãã#pragma pack(4)//设å®ä¸º4åè对é½
ããstruct test
ãã{
ããchar m1;
ããdouble m4;
ããint m3;
ãã};
ãã#pragma pack(pop)//æ¢å¤å¯¹é½ç¶æ
ãã为æµè¯è¯¥åè½ï¼å¯ä»¥ä½¿ç¨sizeofï¼ï¼æµè¯ç»æä½çé¿åº¦ï¼
ãã#defineï¼#errorï¼ï¼includeï¼#ifï¼#elseï¼#elifï¼#endifï¼#ifdefï¼#ifndefï¼#undefï¼#lineï¼#pragmaçãé常ææ¾ï¼ææé¢å¤çå½ä»¤å以符å·#å¼å¤´ï¼ä¸é¢åå«å 以ä»ç»ã
ããä¸ #define
ããå½ä»¤#defineå®ä¹äºä¸ä¸ªæ è¯ç¬¦åä¸ä¸ªä¸²ãå¨æºç¨åºä¸æ¯æ¬¡éå°è¯¥æ è¯ç¬¦æ¶ï¼å以å®ä¹ç串代æ¢å®ãANSIæ åå°æ è¯ç¬¦å®ä¹ä¸ºå®åï¼å°æ¿æ¢è¿ç¨ç§°ä¸ºå®æ¿æ¢ãå½ä»¤çä¸è¬å½¢å¼ä¸ºï¼
ãã#define identifier string
ãã注æï¼
ãã1该è¯å¥æ²¡æåå·ãå¨æ è¯ç¬¦å串ä¹é´å¯ä»¥æä»»æä¸ªç©ºæ ¼ï¼ä¸²ä¸æ¦å¼å§ï¼ä» ç±ä¸æ°è¡ç»æã
ãã2å®åå®ä¹åï¼å³å¯æä¸ºå ¶å®å®åå®ä¹ä¸çä¸é¨åã
ãã3 å®æ¿æ¢ä» ä» æ¯ä»¥ææ¬ä¸²ä»£æ¿å®æ è¯ç¬¦ï¼åææ¯å®æ è¯ç¬¦å¿ é¡»ç¬ç«çè¯å«åºæ¥ï¼å¦åä¸è¿è¡æ¿æ¢ãä¾å¦ï¼
ãã#define XYZ this is a tes
ãã使ç¨å®printf("XYZ")ï¼//该段ä¸æå°"this is a test"èæå°"XYZ"ãå 为é¢ç¼è¯å¨è¯å«åºçæ¯"XYZ"
ãã4å¦æ串é¿äºä¸è¡ï¼å¯ä»¥å¨è¯¥è¡æ«å°¾ç¨ä¸åææ ' \'ç»è¡ã
ãã#defineLONG_STRING"this is a very long\
ããstring that is used as an example"
ãã5 Cè¯è¨ç¨åºæ®é使ç¨å¤§ååæ¯å®ä¹æ è¯ç¬¦ã
ãã6 ç¨å®ä»£æ¢ä»£æ¿å®å¨çå½æ°çä¸å¤§å¥½å¤æ¯å®æ¿æ¢å¢å äºä»£ç çé度ï¼å 为ä¸åå¨å½æ°è°ç¨çå¼éãä½å¢å é度ä¹æ代价ï¼ç±äºéå¤ç¼ç èå¢å äºç¨åºé¿åº¦ã
ãã
ããäº #error
ããå½ä»¤#error强迫ç¼è¯ç¨åºåæ¢ç¼è¯ï¼ä¸»è¦ç¨äºç¨åºè°è¯ã
ãã#erroræ令使é¢å¤çå¨ååºä¸æ¡é误æ¶æ¯ï¼è¯¥æ¶æ¯å å«æ令ä¸çææ¬.è¿æ¡æ令çç®çå°±æ¯å¨ç¨åºå´©æºä¹åè½å¤ç»åºä¸å®çä¿¡æ¯ã
ããä¸ #include
ããå½ä»¤ï¼i nclude使ç¼è¯ç¨åºå°å¦ä¸æºæ件åµå ¥å¸¦æï¼includeçæºæ件ï¼è¢«è¯»å ¥çæºæä»¶å¿ é¡»ç¨åå¼å·æå°æ¬å·æ¬èµ·æ¥ãä¾å¦ï¼
ããï¼include"stdio.h"æè ï¼include<stdio.h>
ããè¿ä¸¤è¡ä»£ç å使ç¨Cç¼è¯ç¨åºè¯»å ¥å¹¶ç¼è¯ç¨äºå¤çç£çæ件åºçåç¨åºã
ããå°æ件åµå ¥ï¼i ncludeå½ä»¤ä¸çæ件å æ¯å¯è¡çï¼è¿ç§æ¹å¼ç§°ä¸ºåµå¥çåµå ¥æ件ï¼åµå¥å±æ¬¡ä¾èµäºå ·ä½å®ç°ã
ããå¦ææ¾å¼è·¯å¾å为æ件æ è¯ç¬¦çä¸é¨åï¼åä» å¨é£äºåç®å½ä¸æ索被åµå ¥æ件ãå¦åï¼å¦ææ件åç¨åå¼å·æ¬èµ·æ¥ï¼åé¦å æ£ç´¢å½åå·¥ä½ç®å½ãå¦ææªåç°æ件ï¼åå¨å½ä»¤è¡ä¸è¯´æçææç®å½ä¸æç´¢ãå¦æä»æªåç°æ件ï¼åæç´¢å®ç°æ¶å®ä¹çæ åç®å½ã
ããå¦æ没ææ¾å¼è·¯å¾åä¸æ件å被å°æ¬å·æ¬èµ·æ¥ï¼åé¦å å¨ç¼è¯å½ä»¤è¡ä¸çç®å½å æ£ç´¢ãå¦ææ件没æ¾å°ï¼åæ£ç´¢æ åç®å½ï¼ä¸æ£ç´¢å½åå·¥ä½ç®å½ã
ããå æ¡ä»¶ç¼è¯å½ä»¤
ããæå 个å½ä»¤å¯å¯¹ç¨åºæºä»£ç çåé¨åæéæ©å°è¿è¡ç¼è¯ï¼è¯¥è¿ç¨ç§°ä¸ºæ¡ä»¶ç¼è¯ãåä¸è½¯ä»¶å ¬å¸å¹¿æ³åºç¨æ¡ä»¶ç¼è¯æ¥æä¾åç»´æ¤æä¸ç¨åºç许å¤é¡¾å®¢çæ¬ã
ãã#ifã#elseï¼#elifå#endif
ãã#ifçä¸è¬å«ä¹æ¯å¦æ#ifåé¢ç常é表达å¼ä¸ºtrueï¼åç¼è¯å®ä¸#endifä¹é´ç代ç ï¼å¦åè·³è¿è¿äºä»£ç ãå½ä»¤#endifæ è¯ä¸ä¸ª#ifåçç»æã
ãã#if constant-expression
ããstatement sequence
ãã#endif
ããEg:
ãã#define MAX 91
ãã#include <iostream>
ããusing namespace std;
ããint main()
ãã{
ãã#if MAX > 99
ããcout<<"MAX is bigger than 99"<<endl;
ãã#elif MAX > 90
ããcout<<"MAX is bigger than 90"<<endl;
ãã#else
ããcout<<"MAX is smaller than 90"<<endl;
ãã#endif
ããreturn 0;
ãã}
ããè·å¨#ifåé¢ç表达å¼å¨ç¼è¯æ¶æ±å¼ï¼å æ¤å®å¿ é¡»ä» å«å¸¸éåå·²å®ä¹è¿çæ è¯ç¬¦ï¼ä¸å¯ä½¿ç¨åéã表达å¼ä¸è®¸å«ææä½ç¬¦sizeofï¼sizeofä¹æ¯ç¼è¯æ¶æ±å¼ï¼ã
ãã
ãã#elseå½ä»¤çåè½æç¹è±¡Cè¯è¨ä¸çelseï¼#else建ç«å¦ä¸éæ©ï¼å¨#if失败çæ åµä¸ï¼ã注æï¼#elseå±äº#ifåã
ãã
ãã#elifå½ä»¤æä¹ä¸ELSE IF ç¸åï¼å®å½¢æä¸ä¸ªif else-ifé¶æ¢¯ç¶è¯å¥ï¼å¯è¿è¡å¤ç§ç¼è¯éæ©ã#elif åè·ä¸ä¸ªå¸¸é表达å¼ãå¦æ表达å¼ä¸ºtrueï¼åç¼è¯å ¶åç代ç åï¼ä¸å¯¹å ¶å®#elif表达å¼è¿è¡æµè¯ãå¦åï¼é¡ºåºæµè¯ä¸ä¸åã
ãã
ãã#if expression
ããstatement sequence
ãã#elif expression1
ããstatement sequence
ãã#endif
ãã
ããå¨åµå¥çæ¡ä»¶ç¼è¯ä¸#endifã#elseæ#elifä¸æè¿#ifæ#elifå¹é ã
ãã# ifdef å# ifndef
ãã
ããæ¡ä»¶ç¼è¯çå¦ä¸ç§æ¹æ³æ¯ç¨#ifdefä¸#ifndefå½ä»¤ï¼å®ä»¬åå«è¡¨ç¤º"å¦ææå®ä¹"å"å¦ææ å®ä¹"ã# ifdefçä¸è¬å½¢å¼æ¯ï¼
ãã
ãã# ifdef macroname
ããstatement sequence
ãã#endif
ãã
ãã#ifdefä¸#ifndefå¯ä»¥ç¨äº#ifã#elseï¼#elifè¯å¥ä¸ï¼ä½å¿ é¡»ä¸ä¸ä¸ª#endifã
ãã
ãã#define MAX 91
ãã#include <iostream>
ããusing namespace std;
ãã
ããint main()
ãã{
ãã#ifdef MAX
ããcout<<"hello,MAX!"<<endl;
ãã#else
ããcout<<"where is MAX?"<<endl;
ãã#endif
ãã#ifndef LEO
ããcout<<"LEO is not defined"<<endl;
ãã#endif
ããreturn 0;
ãã}
ããå½ä»¤#undef åæ¶å ¶åé£ä¸ªåé¢å·²å®ä¹è¿æå®åå®ä¹ãä¸è¬å½¢å¼ä¸ºï¼
ãã#undef macroname
ããå½ä»¤#lineæ¹å__LINE__ä¸__FILE__çå 容ï¼å®ä»¬æ¯å¨ç¼è¯ç¨åºä¸é¢å å®ä¹çæ è¯ç¬¦ãå½ä»¤çåºæ¬å½¢å¼å¦ä¸ï¼
ãã#line number["filename"]
ããå ¶ä¸çæ°å为任ä½æ£æ´æ°ï¼å¯éçæ件å为任ææææ件æ è¯ç¬¦ãè¡å·ä¸ºæºç¨åºä¸å½åè¡å·ï¼æ件å为æºæ件çååãå½ä»¤#line主è¦ç¨äºè°è¯åå ¶å®ç¹æ®åºç¨ã注æï¼å¨#lineåé¢çæ°åæ è¯ä»ä¸ä¸è¡å¼å§çæ°åæ è¯ã
ãã#line 100 "jia"
ããcout<<"#line change line and filename!"<<endl; //line 100
ããcout<<__LINE__<<endl; //101
ããcout<<__FILE__<<endl; //jia
ããäº #pragma
ããå½ä»¤#pragma 为å®ç°æ¶å®ä¹çå½ä»¤ï¼å®å 许åç¼è¯ç¨åºä¼ éåç§æ令ã
ãã#pragmaçä½ç¨æ¯è®¾å®ç¼è¯å¨çç¶ææè æ¯æ示ç¼è¯å¨å®æä¸äºç¹å®çå¨ä½ã#pragmaæ令对æ¯ä¸ªç¼è¯å¨ç»åºäºä¸ä¸ªæ¹æ³,å¨ä¿æä¸CåC++è¯è¨å®å ¨å ¼å®¹çæ åµä¸,ç»åºä¸»æºææä½ç³»ç»ä¸æçç¹å¾ãä¾æ®å®ä¹,ç¼è¯æ示æ¯æºå¨ææä½ç³»ç»ä¸æç,ä¸å¯¹äºæ¯ä¸ªç¼è¯å¨é½æ¯ä¸åçã
ããå ¶æ ¼å¼ä¸è¬ä¸º: #Pragma Para
ãã1 message åæ°ã
ããMessage åæ°è½å¤å¨ç¼è¯ä¿¡æ¯è¾åºçªå£ä¸è¾åºç¸åºçä¿¡æ¯ï¼è¿å¯¹äºæºä»£ç ä¿¡æ¯çæ§å¶æ¯é常éè¦çãå ¶ä½¿ç¨æ¹æ³ä¸ºï¼
ãã#pragma message(âæ¶æ¯ææ¬â)
ããå½ç¼è¯å¨éå°è¿æ¡æ令æ¶å°±å¨ç¼è¯è¾åºçªå£ä¸å°æ¶æ¯ææ¬æå°åºæ¥ã
ããå½å¨ç¨åºä¸å®ä¹äºè®¸å¤å®æ¥æ§å¶æºä»£ç çæ¬çæ¶åï¼èªå·±æå¯è½é½ä¼å¿è®°æ没ææ£ç¡®ç设置è¿äºå®ï¼æ¤æ¶å¯ä»¥ç¨è¿æ¡æ令å¨ç¼è¯çæ¶åå°±è¿è¡æ£æ¥ãå设å¸æå¤æèªå·±æ没æå¨æºä»£ç çä»ä¹å°æ¹å®ä¹äº_X86è¿ä¸ªå®å¯ä»¥ç¨ä¸é¢çæ¹æ³
ãã#ifdef _X86
ãã#pragma message(â_X86 macro activated!â)
ãã#endif
ããå½å®ä¹äº_X86è¿ä¸ªå®ä»¥åï¼åºç¨ç¨åºå¨ç¼è¯æ¶å°±ä¼å¨ç¼è¯è¾åºçªå£éæ¾ç¤ºâ_
ããX86 macro activated!âãå°±ä¸ä¼å 为ä¸è®°å¾èªå·±å®ä¹çä¸äºç¹å®çå®èæè³æ è ®äºã
ãã2 code_seg åæ°ã
ããæ ¼å¼å¦ï¼
ãã#pragma code_seg( ["section-name"[,"section-class"] ] )
ããå®è½å¤è®¾ç½®ç¨åºä¸å½æ°ä»£ç åæ¾ç代ç 段ï¼å½å¼å驱å¨ç¨åºçæ¶åå°±ä¼ä½¿ç¨å°å®ã
ãã3 #pragma once (æ¯è¾å¸¸ç¨ï¼
ããåªè¦å¨å¤´æ件çæå¼å§å å ¥è¿æ¡æ令就è½å¤ä¿è¯å¤´æ件被ç¼è¯ä¸æ¬¡ãè¿æ¡æ令å®é ä¸å¨VC6ä¸å°±å·²ç»æäºï¼ä½æ¯èèå°å ¼å®¹æ§å¹¶æ²¡æ太å¤ç使ç¨å®ã
ãã4 #pragma hdrstop
ãã表示é¢ç¼è¯å¤´æ件å°æ¤ä¸ºæ¢ï¼åé¢ç头æ件ä¸è¿è¡é¢ç¼è¯ãBCBå¯ä»¥é¢ç¼è¯å¤´æ件以å å¿«é¾æ¥çé度ï¼ä½å¦æææ头æ件é½è¿è¡é¢ç¼è¯åå¯è½å 太å¤ç£ç空é´ï¼æ以使ç¨è¿ä¸ªé项æé¤ä¸äºå¤´æ件ã
ããææ¶åå ä¹é´æä¾èµå ³ç³»ï¼æ¯å¦åå Aä¾èµåå Bï¼æ以åå Bè¦å äºåå Aç¼è¯ãä½ å¯ä»¥ç¨#pragma startupæå®ç¼è¯ä¼å 级ï¼å¦æ使ç¨äº#pragma package(smart_init) ï¼BCBå°±ä¼æ ¹æ®ä¼å 级ç大å°å åç¼è¯ã
ãã5 #pragma resource "*.dfm"
ãã表示æ*.dfmæ件ä¸çèµæºå å ¥å·¥ç¨ã*.dfmä¸å æ¬çªä½å¤è§çå®ä¹ã
ãã6 #pragma warning( disable : 4507 34; once : 4385; error : 164 )
ããçä»·äºï¼
ãã#pragma warning(disable:4507 34) /* ä¸æ¾ç¤º4507å34å·è¦åä¿¡æ¯ãå¦æç¼è¯æ¶æ»æ¯åºç°4507å·è¦åå34å·è¦å, è认为è¯å®ä¸ä¼æé误ï¼å¯ä»¥ä½¿ç¨è¿æ¡æ令ã*/
ãã#pragma warning(once:4385) // 4385å·è¦åä¿¡æ¯ä» æ¥åä¸æ¬¡
ãã#pragma warning(error:164) // æ164å·è¦åä¿¡æ¯ä½ä¸ºä¸ä¸ªé误ã
ããåæ¶è¿ä¸ªpragma warning ä¹æ¯æå¦ä¸æ ¼å¼ï¼
ãã#pragma warning( push [ ,n ] )
ãã#pragma warning( pop )
ããè¿én代表ä¸ä¸ªè¦åç级(1---4)ã
ãã#pragma warning( push )ä¿åææè¦åä¿¡æ¯çç°æçè¦åç¶æã
ãã#pragma warning( push, n)ä¿åææè¦åä¿¡æ¯çç°æçè¦åç¶æï¼å¹¶ä¸æå ¨å±è¦åç级设å®ä¸ºnã
ãã#pragma warning( pop )åæ ä¸å¼¹åºæåä¸ä¸ªè¦åä¿¡æ¯ï¼å¨å ¥æ ååºæ ä¹é´æä½çä¸åæ¹å¨åæ¶ãä¾å¦ï¼
ãã#pragma warning( push )
ãã#pragma warning( disable : 4705 )
ãã#pragma warning( disable : 4706 )
ãã#pragma warning( disable : 4707 )
ãã//.......
ãã#pragma warning( pop )
ããå¨è¿æ®µä»£ç çæåï¼éæ°ä¿åææçè¦åä¿¡æ¯(å æ¬4705ï¼4706å4707)ã
ãã7 pragma comment(...)
ãã该æ令å°ä¸ä¸ªæ³¨éè®°å½æ¾å ¥ä¸ä¸ªå¯¹è±¡æ件æå¯æ§è¡æ件ä¸ã
ãã常ç¨çlibå ³é®åï¼å¯ä»¥å¸®è¿å ¥ä¸ä¸ªåºæ件ã
ãã8 progma packï¼nï¼
ããæå®ç»æä½å¯¹é½æ¹å¼ã#pragma pack(n)æ¥è®¾å®åé以nåè对é½æ¹å¼ã
ããn åè对é½å°±æ¯è¯´åéåæ¾çèµ·å§å°åçå移éæ两ç§æ åµï¼
ãã第ä¸ãå¦æn大äºçäºè¯¥åéæå ç¨çåèæ°ï¼é£ä¹å移éå¿ é¡»æ»¡è¶³é»è®¤ç对é½æ¹å¼ï¼
ãã第äºãå¦ænå°äºè¯¥åéçç±»åæå ç¨çåèæ°ï¼é£ä¹å移é为nçåæ°ï¼ä¸ç¨æ»¡è¶³é»è®¤ç对é½æ¹å¼ã
ããç»æçæ»å¤§å°ä¹æ个约ææ¡ä»¶ï¼åä¸é¢ä¸¤ç§æ åµï¼å¦æn大äºæææååéç±»åæå ç¨çåèæ°ï¼é£ä¹ç»æçæ»å¤§å°å¿ 须为å ç¨ç©ºé´æ大çåéå ç¨ç空é´æ°çåæ°ï¼ å¦åå¿ é¡»ä¸ºnçåæ°ã
ããä¸é¢ä¸¾ä¾è¯´æå ¶ç¨æ³ã
ãã#pragma pack(push) //ä¿å对é½ç¶æ
ãã#pragma pack(4)//设å®ä¸º4åè对é½
ããstruct test
ãã{
ããchar m1;
ããdouble m4;
ããint m3;
ãã};
ãã#pragma pack(pop)//æ¢å¤å¯¹é½ç¶æ
ãã为æµè¯è¯¥åè½ï¼å¯ä»¥ä½¿ç¨sizeofï¼ï¼æµè¯ç»æä½çé¿åº¦ï¼
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-03-22
第一句有问题。
比如
#ifndef WIN32
#endif printf("OK\n");
在这里,这个printf就不会被执行。也就是说, 一行中, 只能有一条预处理指令,
当编译的预处理阶段, 编译器识别了一条完整的预处理指令后,后面的所有东西他都不要了。
对于第二句,在函数里,我们是可以使用预处理指令的。
比如
void fun(void)
{
#ifdef WIN32
... // 对于windows系统环境的操作
#else
... // 对于windows以外的系统环境的操作
#endif /* WIN32 */
...
}
楼上的同学, 你是在哪儿本书上看的? 介绍一下呗本回答被提问者采纳
比如
#ifndef WIN32
#endif printf("OK\n");
在这里,这个printf就不会被执行。也就是说, 一行中, 只能有一条预处理指令,
当编译的预处理阶段, 编译器识别了一条完整的预处理指令后,后面的所有东西他都不要了。
对于第二句,在函数里,我们是可以使用预处理指令的。
比如
void fun(void)
{
#ifdef WIN32
... // 对于windows系统环境的操作
#else
... // 对于windows以外的系统环境的操作
#endif /* WIN32 */
...
}
楼上的同学, 你是在哪儿本书上看的? 介绍一下呗本回答被提问者采纳
第2个回答 2019-02-19
你的预处理命令写的有问题,按照你的方式MA(1+a+b)展开后应该是1+a+b*(1+a+b-1),代入初值结果就是8。你的宏定义应该写成#define
MA(x)
(x)*((x)
-
1),这样展开后就是(1+a+b)*((1+a+b)-1),代入初值结果是12。
MA(x)
(x)*((x)
-
1),这样展开后就是(1+a+b)*((1+a+b)-1),代入初值结果是12。
第3个回答 2011-03-22
不能在函数里 在函数前!
第4个回答 2011-03-22
第一句错误!