前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >条件编译指令:#if,#endif

条件编译指令:#if,#endif

作者头像
跋扈洋
发布2021-02-02 14:39:01
2.7K0
发布2021-02-02 14:39:01
举报
文章被收录于专栏:物联网知识
介绍

#if 和 #endif是一组同时使用的,叫做条件编译指令。 #if 与 #define、#include等指令一样是由预处理器这个强大的工具处理的, 预处理器可以在编译前处理c程序。

条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。

最常见的条件编译是防止重复包含头文件的宏,形式跟下面代码类似:

代码语言:javascript
复制
#ifndef LED_H
#define LED_H
#endif // #ifndef LED_H

条件编译中使用的预编译指令

#define 定义一个预处理宏 #undef 取消宏的定义 #if 编译预处理中的条件命令,相当于C语法中的if语句 #ifdef 判断某个宏是否被定义,若已定义,执行随后的语句 #ifndef 与#ifdef相反,判断某个宏是否未被定义 #elif 若#if, #ifdef, #ifndef或前面的 #elif 条件不满足,则执行#elif之后的语句,相当于C语法中的else-if #else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else #endif #if, #ifdef, #ifndef这些条件命令的结束标志. defined  与#if, #elif配合使用,判断某个宏是否被定义

预编译指令应用举例

1. #define、#undef

#define命令定义一个宏:

代码语言:javascript
复制

代码语言:javascript
复制

#undef可以取消宏定义,与#define对应。

2. defined

defined用来测试某个宏是否被定义。defined(name): 若宏被定义,则返回1,否则返回0。 它与#if、#elif、#else结合使用来判断宏是否被定义,defined可用于在一条判断语句中声明多个判别条件;#ifdef和#ifndef则仅支持判断一个宏是否定义。

代码语言:javascript
复制
#if defined(VAX) && defined(UNIX) && !defined(DEBUG)

和#if、#elif、#else不同,#ifdef、#ifndef、defined测试的宏可以是对象宏,也可以是函数宏。

实例讲解

代码语言:javascript
复制
#include <stdio.h>
#define class_1 0
#define class_2 1
int main()
{
#if class_1
printf("class_1\n");
#endif
#ifdef class_2
printf("class_2\n");
#endif
 
 return 0;
}

运行结果图

可以明显看出,程序没有执行

代码语言:javascript
复制
#if        class_1
#endif

中的程序,这是因为,在程序的开头已经定义了class_1为0,而class_2为1,程序遇见

代码语言:javascript
复制
#if
#endif

只执行#if后面是1的程序段,而不执行后面是的程序段。 这就是条件编译指令的用法。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 条件编译中使用的预编译指令
  • 预编译指令应用举例
    • 1. #define、#undef
      • 2. defined
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档