宏是一種可由宏的值代替的代碼段。 宏由#define
指令定義。 有兩種類型的宏:
類似對象的宏
類似對象的宏是一種被值替換的標(biāo)識符。它廣泛用于表示數(shù)字常數(shù)。 例如:
#define PI 3.14
這里,PI
就是代替值3.14
的宏名稱,對于宏名稱可使用與變量命名規(guī)則相同的其它名稱。
類似函數(shù)的宏
類似函數(shù)的宏看起來像函數(shù)調(diào)用。例如:
#define MIN(a,b) ((a)<(b)?(a):(b))
這里,MIN
是宏的名稱。
可通過訪問#define來查看類似對象和類似函數(shù)的宏的完整示例。
ANSI C定義了許多可在C語言程序中使用的預(yù)定義的宏。如下列表所示 -
序號 | 宏 | 說明 |
---|---|---|
1 | _DATE_ |
以“MMM DD YYYY” 格式表示當(dāng)前日期。 |
2 | _TIME_ |
以“HH:MM:SS” 格式表示當(dāng)前時間。 |
3 | _FILE_ |
表示當(dāng)前文件名。 |
4 | _LINE_ |
表示當(dāng)前行。 |
5 | _STDC_ |
當(dāng)編譯器符合ANSI標(biāo)準(zhǔn)時,它被定義為1 。 |
C語言預(yù)定義的宏示例
為了更好地演示如何使用C語言預(yù)定義的宏,我們創(chuàng)建一個源文件:predefined-macros.c 在工程 preprocessor 中,其代碼如下所示 -
#include <stdio.h>
void main() {
printf("File :%s\n", __FILE__);
printf("Date :%s\n", __DATE__);
printf("Time :%s\n", __TIME__);
printf("Line :%d\n", __LINE__);
//printf("STDC :%d\n", __STDC__); 不常用
}
執(zhí)行上面示例代碼,得到以下結(jié)果 -
File :f:\worksp\clanguage\preprocessor\preprocessor\predefined-macros.c
Date :Aug 17 2017
Time :17:33:25
Line :6