C语言中条件编译的作用

看到有的头文件的代码就是一堆的宏定义,比方说这样:#ifndefA#defineA#endif#ifndefB#defineB#endif............这有什么... 看到有的头文件的代码就是一堆的宏定义,比方说这样:
#ifndef A
#define A
#endif

#ifndef B
#define B
#endif
............
这有什么用?
我目前的认识是,头文件里放函数声明,源文件里放函数体,就是搞不懂弄这么一堆宏定义干什么。
条件编译也是,如果不编译的话,不写就是了,何必写一堆最后又不编译的东西。
展开
 我来答
吉祥二进制
高粉答主

推荐于2017-09-08 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33922 获赞数:84610

向TA提问 私信TA
展开全部

条件编译属于三种宏定义中的一种,条件指示符的最主要目的是防止头文件的重复包含和编译,例如:一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误


条件编译常用的有四个预处理命令:#if、#else、#elif、#endif。

#if指令的形式为:

#if 常量表达式
代码块
#endif

#if后面的常量表达式为值,则编译它与#endif之间的代码,否则跳过这些代码。指令#endif标识一个#if块的结束。


#else被使用来标志#if的末尾和#else块的开始。这是必须的,因为任何#if仅有一个#endif与之关联。


#elif意指"else if",它形成一个if else if嵌套语句用于多种编译选择。#elif后面跟一个常量表达式,如果表达式是真,则编译其后的代码块,不对其他#elif表达式进行检测,否则顺序测试下一块。常见的形式如下:

形式1:

  #ifdef 标识符
  /*程序段 1*/
  #else
  /*程序段 2*/
  #endif

它的作用是当标识符已经由#define定义过了,则编译程序段1,否则编译程序段2,也可以使用简单形式

   #ifdef 标识符
  /*程序段1*/
   #endif

  

形式2:

   #ifndef 标识符
  #define 标识符
  /*程序段 1*/
  #else
  /*程序段 2*/
  #endif

  它的作用是当标识符没有由#define定义过,则编译程序段1,否则编译程序段2 ,也可以使用简单形式

   #ifndef 标识符
  #define 标识符
  /*程序段 1*/
  # endif

形式3:

 #if 表达式
  /*程序段 1*/
  #else
  *程序段 2*/
  # endif

  它的作用是 当“表达式”值为真时编译程序段1。否则则编译程序段2,也可以使用简单形式

  # if 表达式
  /*程序段 1*/
  # endif

形式4:

    #if 表达式1
    /*程序段 1*/
    #elif 表达式2
    /*程序段 2*/
    ............
    #elif 表达式n
    /*程序段n */
    #endif

    它的作用是当“表达式1”值为1时编译程序段1,表达式2的值为真是编译程序段2,否则依次顺序判断到表达式n。


最后,条件编译的条件是一个常量表达式,支持逻辑与&&和或||运算。以上四种形式的条件编译预处理结构都可以嵌套使用,

标识符: 在理论上来说可以是自由命名的,但每个头文件的这个标识符都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h。

#ifndef _STDIO_H_
#define _STDIO_H_
/*程序段 */
#endif
蒸汽雪人骑士E6
推荐于2017-10-02
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
你如果讲一个函数声明2次,就会报错。所以把函数声明写在头文件中后,如果引用了2次这个头文件,也会报错。#ifndef #define 宏就是用来避免头文件重复包含的,意思是 如果没有这个定义,就定义下面的内容。
条件编译是为了代码能在不同的环境中都编译通过,通用性更好。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
军军106
2010-12-19 · TA获得超过453个赞
知道小有建树答主
回答量:1747
采纳率:0%
帮助的人:817万
展开全部
防止重复包含,你完全不用去管它,编译器会搞定的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秒懂百科精选
高粉答主

2020-12-18 · 每个回答都超有意思的
知道答主
回答量:60.8万
采纳率:14%
帮助的人:3.8亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
knife12
2010-12-18 · TA获得超过347个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:336万
展开全部
条件编译为了提高程序的可移植性,增加程序的灵活性。便于程序在不同的软硬件环境下都可正常运行而不需要修改程序。

比如说一个商业软件,面向的是不同的硬件系统和软件系统,如果移植性不好,那卖出去的软件在每个环境下都要单独设置,那软件公司的开发人员每天都要做这样的修改程序的工作,会影响正常的工作。所以对需要的部分进行条件编译,可以大大降低软件需要改动的部分或者不改动。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式