宏定義(轉)

來源:互聯網
上載者:User

標籤:

摘抄自:http://blog.chinaunix.net/uid-17188120-id-4026378.html

 

1.簡單的宏定義

#define 標識符 其他清單(其他清單可以是數,字串字面量,標點符號,運算子,標識符,關鍵字,字元常量。注意:其他清單是可以為空白的)

 

典型的使用方法:

定義值為空白

#define BUG

 

重新定義資料類型

#define IT int

 

2.帶參數的宏

#define 標識符(x1,x2,x3...xn) 其他清單  (注意:x1,x2,x3..是宏的參數,標識符和其左括弧之間不能有空格)

使用方法:

#define MAX(x,y) ((x)>(y)?(x):(y))

i=MAX(j+k,m-n);

替換為:

i=MAX((j+k)>(m-n)?(j+k):(m-n));

#define SI_EX(n) ((n)%2==0)

if(SI_EX(i)) i++;

替換為:

if((n)%2==0))

通過以上例子我們可以看出,標識符帶參數(X1,X2,X3.....)在替換時會被其他清單(Y1,Y2,Y3....)對應的替換,但是和順序無關。

 

3.define的多行定義

define可以替代多行的代碼,在每一個換行的時候加上一個"\"

#define MAX(X,Y) do { \

語句1; \

語句2; \

/* 注釋的寫法 */ \

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

 

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

#ifdef WINDOWS

......

#endif

#ifdef LINUX

......

#endif

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

 

5.取消宏

#undef 標識符

 

6.條件編譯

#ifdef XXX…(#else) … #endif

控制是否顯示調試資訊

#ifdef BUGPRINT

#define BUG(arg1,arg2) printf(arg1,arg2)

#elif

#define BUG 

#endif

 

7.預定義宏

在C語言中收錄了一些有用的宏,這些宏是提供當前編譯資訊的。

__LINE__        被編譯檔案的行數

(整型)

__FILE__  被編譯檔案的名字 (字元型)

__DATE__  編譯日期 (字元型)

__TIME__  編譯時間 (字元型)

__STDC__  如果編譯器接受標準C,那麼值為1. (整型)

 

通常我們在編譯的時候我們可以用這些預定義的宏來進行排錯,例如:

一般情況下,當出現除零的情況時編譯器是沒有提示的,我們可以自訂一個解決辦法。

#define CHECKZERO(divisor)\

if(divisor==0)\

printf("***ATTEMPT TO DIVIDE BY ZERO IN LINE %d of file %s ***\n",__LINE__,__FILE__);\

宏定義(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.