宏定義的用法
一、#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)當宏定義涉及到數組的時候,就可試一試它。