405 字
2 分钟
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。

C语言预编译
https://fuwari.vercel.app/posts/c语言预编译/
作者
橙橙橙汁
发布于
2021-10-27
许可协议
CC BY-NC-SA 4.0