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

条件编译ifdef_ifndef_endif用法

作者头像
yifei_
发布2022-11-14 14:19:42
6410
发布2022-11-14 14:19:42
举报
文章被收录于专栏:yifei的专栏

前言

C语言中的预处理功能有三种,分别是宏定义,文件包含和条件编译,这里说的就是”条件编译”. 其实看名字就能看出来,满足一定条件才进行编译,是给编译器看的. 只要学过if else语句的人,就能很容易理解这个.

#ifdef

就是”if define”的意思,即”如果定义了”

代码语言:javascript
复制
#ifdef 标识符1
 程序段1
#else
 程序段2
#endif

如果定义过标识符1,那就执行程序段1,负责执行程序段2.也可以有如下用法:

代码语言:javascript
复制
#ifdef 标识符1
 程序段1
#endif

#ifndef

“if not define”,如果没有定义过.

代码语言:javascript
复制
#ifndef 标识符1
 程序段1
#else
 程序段2
#endif

如果没有定义过标识符1,就执行程序段1,负责执行程序段2.也可以有如下用法:

代码语言:javascript
复制
#ifndef aaa
 #define aaa a*a*a
#endif

#if

代码语言:javascript
复制
#if 表达式1
 程序段1
#else
 程序段2
#endif

作用&例子

防止重复定义 当你在a.h中定义了一个”某变量”,然后在b.h中包含了a.h的头文件,接着在c.h中包含了a.h的头文件,最后你又在test.c中包含了a.h和c.h两个头文件.这样就相当于你在test.c中定义了两遍某变量啊,c语言是不允许重复定义的(声明是可以重复的),所以你得告诉编译器,我如果定义过某变量你就别再给我编译这句话了,如果没定义过,再编译.

举例 a.h

代码语言:javascript
复制
#include <stdio.h>
#include "b.h"

b.h

代码语言:javascript
复制
#include "a.h"

c.c

代码语言:javascript
复制
#include "a.h"
#include "b.h"
int main(){
    printf("Hello!");
}

这样在c.c中会编译错误,将b.h改为如下就可以解决这个问题. b.h

代码语言:javascript
复制
#ifndef _A_H
#define _A_H 
#include "a.h"
#endif

用于注释代码

代码语言:javascript
复制
#include <stdio.h>
#define CONFIG_DEBUG 
int main(){
    FILE *fp;
    fp=fopen("D:\\DEV\\test.txt","r"); 
    if(NULL==fp){
        printf("error!");
    }
#ifdef CONFIG_DEBUG 
    printf("open test.txt ok");
#endif
    return 0;
}

当不想让程序执行输出语句时,把#define CONFIG_DEBUG注释掉就行了.

PS:

代码语言:javascript
复制
#define 
其实是
#  define
只要有一个#就表示是预处理语句了!

参考

https://blog.csdn.net/weixin_41656968/article/details/80493923 https://baike.baidu.com/item/%23ifndef/2835043?fr=aladdin

欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • #ifdef
  • #ifndef
  • #if
  • 作用&例子
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档