橙汁小窝

C语言预编译

用#开头加关键词构成一条预编译指令,该指令将在编译前对源代码进行转换

宏的处理

#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。

发表评论

电子邮件地址不会被公开。 必填项已用*标注