C語言中數據有常量和變量,其中定義常量主要有兩種方法,這里主要學習#define定義常量的方法。
1.#define定義數字宏常量
例子如下:
|
1
2
3
4
5
6
7
8
9
10
|
#include<stdio.h>
#define PI 3.14
int
main(
void
)
{
printf
(
"%d\n"
,PI);
printf
(
"%f\n"
,PI);
return
0;
}
|
以上例子通過#define定義了常量PI,其值為3.14。其值為float單浮點數,但是#define定義時沒有聲明基本數據類型,而是直接定義了一個常量字符來表示此數值。
#define沒有顯示的聲明基本數據類型,因此在使用此方法定義常量時需要程序員清楚常量符號表示的數據是哪一種類型,否則會引起錯誤。
比如上面例子中PI是單浮點數,通過兩種不同的數據類型進行打印,打印的結果如下:
$ ./define.exe
1374389535
3.140000
從結果看差異很大,因此在使用#define常量符號時,需要自判定數據的類型。
2.#define定義字符串宏常量
#define CITY "WuHan"
這是最簡單的字符串宏常量,中間沒有任何的轉義字符或特殊字符。
#define PATH "E:\\c_study"
這是比較復雜的字符串宏常量,比如路徑等,這里需要是雙斜杠,否則會報如下錯誤:
$ gcc define.c -o define
define.c: 在函數‘main’中:
define.c:10:16: 警告:未知的轉義序列:‘\c’
printf("%s\n",PATH);
^
即\需要配合轉義字符使用。
例子代碼如下:
#include<stdio.h>
#define PI 3.14
#define CITY "WuHan"
#define PATH "E:\\c_study"
int main(void)
{
printf("%s\n",CITY);
printf("%s\n",PATH);
return 0;
}
輸出結果為:
$ ./define.exe
WuHan
E:\c_study
3.#define定義函數宏常量
函數宏常量涉及到函數換行,換行=\+回車
例子:
#include<stdio.h>
#define dump(name)\
{\
printf(name); \
printf("\n"); \
printf(name); \
printf("\n"); \
}
int main(void)
{
dump("test0");
dump("test1");
return 0;
}
運行結果:
$ ./define
test0
test0
test1
test1
即#define定義時,換行不是以;判定,而是以"/+回車"判定
4.#undef 用來撤銷宏常量的定義,撤銷后不存在此宏常量
總結:
#define可以定義多種類型的宏常量,需要結合不同的場景使用,每一種場景需要注意對應的數據類型,轉義字符和換行等關鍵地方。

