几个预编译指令的用法
*.幾個預編譯指令的用法
#??????? 字符串化運算符,其主要效果是把參數的名字轉換為字符串。
Example:???
//1.?*.h中定義
#defineSTRINGLIZE(ivalue) ?#ivalue
// *.cpp中定義
CStringstrTmp = STRINGLIZE(2);
AfxMessageBox(strTmp);
// 結果是:彈出消息框中顯示2,說明可以變成字符串
?
// 2.
#defineSTRINGLIZE(ivalue) printf(#ivalue " is: %d", ivalue)
???????????? // 使用
????????????STRINGLIZE(2);
// 結果是:2 is: 2,將ivalue的值與后面的字符串合并成一個字符串了
?
// 注:以下這情況使用時的結果會有不同
int ?a = 2;
STRINGLIZE(a);
// 1. 結果是:彈出消息框中顯示a
// 2. 結果是:a is: 2
注意:預處理的意思就是在編譯運行前按字面處理,
##?????? 粘貼運算符,即它先進行宏替換,再進行連接。
Example:??
#defineMACR1 printf("MACR1 is invoked.")
#defineMACR2 printf("MACR2 is invoked.")
????????????#define MAKE_MACR(n) MACR ## n
// 使用時
MAKE_MACR(2);// -->相當于調用了宏MACR2
// 結果是:MACR2 isinvoked.
?
// 2.
#defineSTRINGLIZE(ivalue) TRACE("ivalue is: %d", ivalue##ivalue)
STRINGLIZE(2);
// 2. 結果是:ivalueis: 22
// 3.
int a =2;
STRINGLIZE(a);
// 3. 結果是:errorC2065: 'aa' : undeclared identifier
#@?????? 字符化運算符
Example:???#defineCHARIZEIT(x) #@x
// 使用
char?c= CHARIZEIT(z);
// 結果是:c = 'z'
#include包含一個源代碼文件
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?{?\
??????????????語句;?\
}while(條件)?
?????????? 關鍵是要在每一個換行的時候加上一個"\"。
#undef??取消已定義的宏
#if?????如果給定條件為真,則編譯下面代碼
#ifdef??如果宏已經定義,則編譯下面代碼
#ifndef?如果宏沒有定義,則編譯下面代碼
#elif???如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼
#endif??結束一個#if/#ifdef/#ifndef...#else條件編譯塊
#error??停止編譯并顯示錯誤信息
#line???指令可以改變編譯器用來指出警告和錯誤信息的文件號和行號。
#pragma?指令沒有正式的定義。編譯器可以自定義其用途。
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的几个预编译指令的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unicode编程
- 下一篇: VC使用flash简易教程