用#开头加关键词构成一条预编译指令,该指令将在编译前对源代码进行转换
宏的处理
#define
使用#define 定义一个宏,用法如下:
#define MAX_DATA_ARR 128
#define LED1 Pin_1
#undef
使用#undef 取消定义宏,用法如下:
#undef MAX_DATA_ARR
#undef LED1
宏的定义判断
#ifdef
使用#ifdef 检查一个宏是否存在,存在就执行下面的语句,用法如下:
#define HELLO 0
#ifdef HELLO
printf("Hello World!");
#endif
#ifndef
使用#ifndef 检查一个宏是否存在,不存在就执行下面的语句,用法如下:
//#define HELLO 0
#ifndef HELLO
printf("Hello World!");
#endif
宏的数值判断
#if
使用#if 检查一个宏是数值是否为需要值,是就执行下面区块的语句,用法如下:
#define AC 1
#if AC == 1
printf("AC = 1");
#endif
#elif
使用#elif 检查从#if到#else的宏是数值是否为需要值,是就执行下面区块的语句,用法如下:
#define AC 2
#if AC == 1
printf("AC = 1");
#elif AC == 2
printf("AC = 2");
#endif
#else
无满足#if和#elif的值就执行#else 下面区块的语句,用法如下:
#define AC 1
#if AC == 1
printf("AC = 1");
#elif AC == 2
printf("AC = 2");
#else
printf("AC = ?");
#endif
#endif
使用#endif 结束一块宏选择区块,用法如下:
#define AC 1
#define BC 2
#if AC == 1
printf("AC = 1");
#endif
#if BC == 1
printf("BC = 1");
#endif
注:如果使用判断时宏未定义将等价于0
#if NOT_DEFINE <=> #if 0
如果定义了却未赋值将报出*[Error] #if with no expression*,在于#if 不但会检查是否定义且会检查值,如果只需要检查定义请使用#ifdef。