hjh132's Blog
          If a thing is worth doing it is worth doing well.
          posts - 20,comments - 9,trackbacks - 0

          1.函數調用時,先求出實參表達式的值,然后帶入形參。而使用帶參的宏只是進行簡單的字符替換。
          2.函數調用是在程序運行時處理的,分配臨時的內存單元;而宏展開則是在編譯時進行的,在展開時并不分配內存單元,不進行值的傳遞處理,也沒有“返回值”的概念。
          3.對函數中的實參和形參都要定義類型,二者的類型要求一致,如不一致,應進行類型轉換;而宏不存在類型問題,宏名無類型,它的參數也無類型,只是一個符號代表,展開時帶入指定的字符即可。宏定義時,字符串可以是任何類型的數據。
          4.調用函數只可得到一個返回值,而用宏可以設法得到幾個結果。
          5.使用宏次數多時,宏展開后源程序長,因為每展開一次都使程序增長,而函數調用不使源程序變長。
          6.宏替換不占運行時間,只占編譯時間;而函數調用則占運行時間(分配單元、保留現場、值傳遞、返回)。

          一般來說,用宏來代表簡短的表達式比較合適。

          有時使用宏時會引起理解錯誤:

          例:

          #include<iostream.h>
          #define max(a,b) ((a>b)?a:b)
          void main()
          {
           int i=3,j=2;
           cout<<max(++i,j)<<endl;
           cout<<i<<"  "<<j<<endl;
          }

          運行結果:

          5

          5  2

          posted on 2008-03-24 12:21 101℃太陽 閱讀(573) 評論(0)  編輯  收藏 所屬分類: C與C++

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 瓮安县| 平原县| 青神县| 虎林市| 高青县| 财经| 上思县| 沂水县| 安多县| 桑植县| 剑河县| 太保市| 乳山市| 永州市| 阳春市| 雷波县| 通江县| 盐源县| 万山特区| 平乐县| 许昌县| 庆安县| 满城县| 武定县| 华阴市| 海南省| 胶南市| 华安县| 融水| 西充县| 上杭县| 太谷县| 泸州市| 惠安县| 玛曲县| 石楼县| 上林县| 阳原县| 宁国市| 平江县| 华亭县|