<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    c++ --宏(#define用法)

    Posted on 2010-08-11 15:28 幻海藍夢 閱讀(453) 評論(0)  編輯  收藏 所屬分類: C++
    原文:http://dev.firnow.com/course/3_program/c++/cppsl/200861/118742.html 

    今天整理了一些#define的用法,與大家共享!

    1.簡單的define定義

    #define MAXTIME 1000 

    一個簡單的MAXTIME就定義好了,它代表1000,如果在程序里面寫

    if(i<MAXTIME){.........}

    編譯器在處理這個代碼之前會對MAXTIME進行處理替換為1000。

    這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用,這個問題在下面反映的尤為突出。

    2.define的“函數定義”

    define可以像函數那樣接受一些參數,如下

    #define max(x,y) (x)>(y)?(x):(y);

    這個定義就將返回兩個數中較大的那個,看到了嗎?因為這個“函數”沒有類型檢查,就好像一個函數模板似的,當然,它絕對沒有模板那么安全就是了。可以作為一個簡單的模板來使用而已。

    但是這樣做的話存在隱患,例子如下:

    #define Add(a,b) a+b;

    在一般使用的時候是沒有問題的,但是如果遇到如:c * Add(a,b) * d的時候就會出現問題,代數式的本意是a+b然后去和c,d相乘,但是因為使用了define(它只是一個簡單的替換),所以式子實際上變成了

    c*a + b*d

    另外舉一個例子:

    #define pin (int*);

    pin a,b;

    本意是a和b都是int型指針,但是實際上變成int* a,b;

    a是int型指針,而b是int型變量。

    這是應該使用typedef來代替define,這樣a和b就都是int型指針了。

    所以我們在定義的時候,養成一個良好的習慣,建議所有的層次都要加括號。

    3.宏的單行定義

    #define A(x) T_##x

    #define B(x) #@x

    #define C(x) #x

    我們假設:x=1,則有:

    A(1)------〉T_1

    B(1)------〉’1’

    C(1)------〉""1""

    (這里參考了 hustli的文章)

    4.define的多行定義

    define可以替代多行的代碼,例如MFC中的宏定義(非常的經典,雖然讓人看了惡心)

    #define MACRO(arg1, arg2) do { ""

    /* declarations */ ""

    stmt1; ""

    stmt2; ""

    /* ... */ ""

    } while(0) /* (no trailing ; ) */

    關鍵是要在每一個換行的時候加上一個"""""" 

    摘抄自http://www.blog.edu.cn/user1/16293/archives/2005/115370.shtml 修補了幾個bug

    5.在大規模的開發過程中,特別是跨平臺和系統的軟件里,define最重要的功能是條件編譯。

    就是:

    #ifdef WINDOWS

    ......

    ......

    #endif

    #ifdef LINUX

    ......

    ......

    #endif

    可以在編譯的時候通過#define設置編譯環境

    6.如何定義宏、取消宏

    //定義宏

    #define [MacroName] [MacroValue]

    //取消宏

    #undef [MacroName]

    普通宏

    #define PI (3.1415926)

    帶參數的宏

    #define max(a,b) ((a)>(b)? (a),(b))

    關鍵是十分容易產生錯誤,包括機器和人理解上的差異等等。

    7.條件編譯

    #ifdef XXX…(#else) …#endif

    例如 #ifdef DV22_AUX_INPUT

    #define AUX_MODE 3 

    #else

    #define AUY_MODE 3

    #endif

    #ifndef XXX … (#else) … #endif [Page]

    8.頭文件(.h)可以被頭文件或C文件包含;

    重復包含(重復定義)

    由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現重復定義的問題的。

    通過條件編譯開關來避免重復包含(重復定義)

    例如

    #ifndef __headerfileXXX__

    #define __headerfileXXX__

    文件內容

    #endif

    主站蜘蛛池模板: 中国一级毛片免费看视频| 免费国产黄网站在线看| 91成人在线免费视频| 亚洲AV无码乱码国产麻豆| 曰批全过程免费视频在线观看无码 | 噜噜噜亚洲色成人网站| 你懂的网址免费国产| 中文字幕亚洲一区| 91视频精品全国免费观看| 国产亚洲AV无码AV男人的天堂| 精品一区二区三区高清免费观看| 色久悠悠婷婷综合在线亚洲| 成av免费大片黄在线观看| 国产成人精品日本亚洲| 在线美女免费观看网站h| 国产91在线|亚洲| 色视频色露露永久免费观看| 在线亚洲精品视频| 亚洲午夜精品久久久久久浪潮| 二个人看的www免费视频| 国产精品亚洲аv无码播放| 免费A级毛片在线播放| 亚洲中文字幕久久久一区| 四虎AV永久在线精品免费观看| 亚洲国产精品综合久久久| 免费无码精品黄AV电影| 亚洲精品第一国产综合精品| 黄页免费的网站勿入免费直接进入| 亚洲欧美一区二区三区日产| 亚洲日韩国产一区二区三区| 久久久免费精品re6| 亚洲色偷偷色噜噜狠狠99网| 亚洲精品高清在线| 18禁无遮挡无码国产免费网站| 亚洲精品国产第一综合99久久| 1a级毛片免费观看| 自拍偷自拍亚洲精品播放| 久久精品国产亚洲AV麻豆不卡| 免费AA片少妇人AA片直播| 国产乱妇高清无乱码免费| 亚洲精品第一国产综合野|