define宏定義的基本用法與原理

                                                                     宏定義的用法

一、#define的基本用法

#define命令是C語言中的一個宏定義命令,它用來將一個標識符定義爲一個字符串,該標識符被稱爲宏名,被定義的字符串稱爲替換文本。該命令有兩種格式:一種是簡單的宏定義,另一種是帶參數的宏定義。

(1)簡單的宏定義(不帶參數的宏定義)

#define   <宏名> <字符串>

例:   #define PI 3.1415926

注意幾個錯誤的用法:

       #define NAME "zhang"

      #define 0x abcd

      #define NAME "zhang

(2)帶參數的宏定義

  #define   <宏名> (<參數表>)   <宏體>
    例: #define   Sum(a, b)  a + b

如 int n = 3; int m = 5; printf("%d",Sum(m, n));

運行結果爲3 +5 = 8;

注意:記住這是簡單的替換而已,不要在中間計算結果,一定要替換出表達式之後再算。

如在以下例子中經常出現錯誤:

#include <stdio.h>  
#define S(a,b) a*b  
  
int main(void)  
{  
    int n = 3;  
    int m = 5;  
    printf("%d",S(n+m,m+n));    
    return 0;  
}  

這道題容易出現的錯誤結果是64,得到這個結果肯定是這樣理解的(3+5)*(5+3)。其實並不是,大家要理解宏定義的概念,

宏定義只是簡單的符號替換,而不做其他處理,所以這裏得到的結果是3+5*5+3=31。

(3)用於條件編譯:(常用形式) #ifndef _AAA_H #define _AAA_H //c/c++代碼 #endif

在大規模的開發過程中,特別是跨平臺和系統的軟件裏,define最重要的功能是條件編譯。可以在編譯的時候通過#define設置編譯環境

#ifdef WINDOWS

......

......

#endif

#ifdef LINUX

......

......

#endif

(4)如何定義宏、取消宏

//定義宏

#define [MacroName] [MacroValue]

//取消宏

#undef [MacroName]

 

二、define中的特殊符號:#,##,#@,/

(1)#:字符串化
    若,#define change2string(str) #str;

 則,char *string = change2string(123),變成了char *string = "123"。


(2)##:連接

若,#define GPIO(io) GPIO##io

則,GPIO(A),變成了GPIOA 注意:這裏了的變換後的GPIOA必須是已經存在的。

 

(3)@#,字符化

若,#define change2char(ch) @#ch

則,char[3] = change2char(p),就變成了char[3] = 'p';

 

(4)\,將兩個行連接到一起

注意:(1)必須要\符號放在行尾,前後添加空格。

(2)當宏定義涉及到數組的時候,就可試一試它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章