程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> #define的一些用法

#define的一些用法

編輯:關於C語言

1.簡單的define定義

#define   MAX   1000  

一個簡單的max就定義好了,它代表1000,如果在程序裡面寫
for(i=0;i{
                  ................
}
編譯器在處理這個代碼之前會對MAX進行處理替換為1000。

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的文章)

3.define的多行定義

define可以替代多行的代碼,例如MFC中的宏定義(非常的經典,雖然讓人看了惡心)
 
#define   MACRO(arg1,   arg2)   do   {  
    /*   declarations   */  
    stmt1;      
    stmt2;      
    /*   ...   */    
    }   while(0)   /*   (no   trailing   ;   )   */
關鍵是要在每一個換行的時候加上一個 " "   ,""後面不能有空格。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved