橙汁小窝

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。

发表评论

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