几个预编译指令的用法
*.幾個(gè)預(yù)編譯指令的用法
#??????? 字符串化運(yùn)算符,其主要效果是把參數(shù)的名字轉(zhuǎn)換為字符串。
Example:???
//1.?*.h中定義
#defineSTRINGLIZE(ivalue) ?#ivalue
// *.cpp中定義
CStringstrTmp = STRINGLIZE(2);
AfxMessageBox(strTmp);
// 結(jié)果是:彈出消息框中顯示2,說(shuō)明可以變成字符串
?
// 2.
#defineSTRINGLIZE(ivalue) printf(#ivalue " is: %d", ivalue)
???????????? // 使用
????????????STRINGLIZE(2);
// 結(jié)果是:2 is: 2,將ivalue的值與后面的字符串合并成一個(gè)字符串了
?
// 注:以下這情況使用時(shí)的結(jié)果會(huì)有不同
int ?a = 2;
STRINGLIZE(a);
// 1. 結(jié)果是:彈出消息框中顯示a
// 2. 結(jié)果是:a is: 2
注意:預(yù)處理的意思就是在編譯運(yùn)行前按字面處理,
##?????? 粘貼運(yùn)算符,即它先進(jìn)行宏替換,再進(jìn)行連接。
Example:??
#defineMACR1 printf("MACR1 is invoked.")
#defineMACR2 printf("MACR2 is invoked.")
????????????#define MAKE_MACR(n) MACR ## n
// 使用時(shí)
MAKE_MACR(2);// -->相當(dāng)于調(diào)用了宏MACR2
// 結(jié)果是:MACR2 isinvoked.
?
// 2.
#defineSTRINGLIZE(ivalue) TRACE("ivalue is: %d", ivalue##ivalue)
STRINGLIZE(2);
// 2. 結(jié)果是:ivalueis: 22
// 3.
int a =2;
STRINGLIZE(a);
// 3. 結(jié)果是:errorC2065: 'aa' : undeclared identifier
#@?????? 字符化運(yùn)算符
Example:???#defineCHARIZEIT(x) #@x
// 使用
char?c= CHARIZEIT(z);
// 結(jié)果是:c = 'z'
#include包含一個(gè)源代碼文件
Example:#include /#include "my.h"/#include "t.c"
#define?定義宏
Example:#define MAX_NUM 10/#define?max(x,y)?(x) > (y) ? (x) : (y);
#define可以替代多行的代碼,例如MFC中的宏定義:
????????????#define?MACRO(arg1,?arg2)?do?{?\
??????????????語(yǔ)句;?\
}while(條件)?
?????????? 關(guān)鍵是要在每一個(gè)換行的時(shí)候加上一個(gè)"\"。
#undef??取消已定義的宏
#if?????如果給定條件為真,則編譯下面代碼
#ifdef??如果宏已經(jīng)定義,則編譯下面代碼
#ifndef?如果宏沒(méi)有定義,則編譯下面代碼
#elif???如果前面的#if給定條件不為真,當(dāng)前條件為真,則編譯下面代碼
#endif??結(jié)束一個(gè)#if/#ifdef/#ifndef...#else條件編譯塊
#error??停止編譯并顯示錯(cuò)誤信息
#line???指令可以改變編譯器用來(lái)指出警告和錯(cuò)誤信息的文件號(hào)和行號(hào)。
#pragma?指令沒(méi)有正式的定義。編譯器可以自定義其用途。
?
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的几个预编译指令的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Unicode编程
- 下一篇: Inno Setup 5制作安装程序