C语言中条件编译的作用

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

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

条件编译属于三种宏定义中的一种,条件指示符的最主要目的是防止头文件的重复包含和编译,例如:一个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
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-02
你如果讲一个函数声明2次,就会报错。所以把函数声明写在头文件中后,如果引用了2次这个头文件,也会报错。#ifndef #define 宏就是用来避免头文件重复包含的,意思是 如果没有这个定义,就定义下面的内容。
条件编译是为了代码能在不同的环境中都编译通过,通用性更好。本回答被提问者采纳
第2个回答  2010-12-19
防止重复包含,你完全不用去管它,编译器会搞定的。
第3个回答  2020-12-18

第4个回答  2010-12-18
条件编译为了提高程序的可移植性,增加程序的灵活性。便于程序在不同的软硬件环境下都可正常运行而不需要修改程序。

比如说一个商业软件,面向的是不同的硬件系统和软件系统,如果移植性不好,那卖出去的软件在每个环境下都要单独设置,那软件公司的开发人员每天都要做这样的修改程序的工作,会影响正常的工作。所以对需要的部分进行条件编译,可以大大降低软件需要改动的部分或者不改动。

C语言中条件编译的作用
条件编译属于三种宏定义中的一种,条件指示符的最主要目的是防止头文件的重复包含和编译,例如:一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误 条件编译常用的有四个预处理命令:#if、#else、#elif、#endif。if指令的形式为:if 常量表达式代码块#endif#if后面的常量...

关于C语言的条件编译
作用一:编译生成的可执行代码或者只包含程序段1 或者只包含程序段2 ,可执行程序大小会变小;作用二:可以灵活的通过宏定义标识符实现同一函数的不同版本,例如 ifdef 标识符 func1(...) {...} else func1(...) {...} endif 这样func1函数通过宏定义可以有不同的实现 ...

C语言中的条件编译有什么作用
条件编译就是为了实现在满足一定条件时编译某一组语句,而再不满足条件时编译另一组语句!事实上,它确实与条件语句相似,但是它们是不一样的。条件语句中的各个语句都是要经过编译的,而条件编译中的部分语句不需要进行编译(请注意这儿是编译不是执行)。条件编译的作用在编写大型程序的时候就会相当的明...

ifndef define endif作用
ifndef、#define、#endif为C语言的3条预处理语句,主要用作条件编译。先介绍一下条件编译:一般情况下,源代码文件中的所有行都参加编译,但有时需要指定一部分代码在某个条件下才被编译,这就叫做条件编译。条件编译发生在预处理阶段,在C中,主要通过#if、#elif、#else、#ifdef、#ifndef、#endi...

#if #endif 是什么意思啊?
ifdef #endif是C语言的条件编译。条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。如下面的例子:#ifdef 标志符 程序段1 #else 程序段2 #endif 当定义了标志符则对程序段1进行编译,而没有定义标志符时则编译程序段2。

C语言 #ifdef #endif 是什么意思?
ifdef #endif是C语言的条件编译。一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。ifdef的一般形式:ifdef宏名 \/\/语句段 endif 作用:如果在此之前已定义了这样的宏名,则...

C语言中#if #else 有什么作用?
if是个预编译指令的田间编译指令 可以使用条件编译选择特定的代码节进行编译,而排除其他代码节。例如,可能需要编写调试语句来比较同一编程任务的不同方法的速度,或者可能需要本地化用于多种语言的应用程序。条件编译语句被设计为在编译时(而不是在运行时)运行。一般在C++里面有的,#if这类东西通场会...

#if #endif 是什么意思啊?
在C语言编程中,#if和#endif这一对符号具有特殊含义,它们构成了条件编译指令。这些指令在程序正式编译之前起作用,通过预处理机制对代码进行处理。#if是一个条件判断的开始,其后跟着一个条件表达式,而#endif则标志着这一条件编译区域的结束。如果满足#if中定义的条件,编译器会选择性地编译紧跟其后的...

endif是什么意思啊?
ifdef #endif是C语言的条件编译。一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional pile)。ifdef的一般形式:ifdef宏名 语句段 endif 作用:如果在此之前已定义了这样的宏名,则编译语句...

c语言程序,预编译的作用是什么
define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。c 编译系统在对程序进行通常的编译之前,先进行预处理。 c 提供的预处理功能主要有以下三 种:1)宏定义  #define...

相似回答