C语言 条件编译

条件编译命令对程序的内容进行选择性的编译,可以根据条件选择是否进行编译

#ifndef和#endif

Ifndef == if not define

#ifdef x //x是否定义,如果被定义返回假,没有定义则返回真

#ifndef  x   //先检测是否宏定义过x

#define x  //如果没有宏定义过x,定义x

语句块1

#endif

语句块2

根据是否定义变量X进行分支选择

#ifndef(条件指示符):防止头文件的重复包含和编译

条件编译可以利用条件语句进行实现为什么不用:条件语句对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译只进行编译其中程序的语句块1或者语句块2,生成的目标代码程序较短。

在程序中,假如有两个C文件都包含include用一个头文件,在编译时,这两个C文件要一同编译成一个可运行文件,会出现大量的声明冲突,这时候将头文件的内容都放在#ifndef和#endif中,不管有多少个C文件去引用这个头文件,声明也不会发生冲突。

#ifndef <标识>

#define <标识>

…………

#endif

头文件的标识都是唯一的,标识的命名规则是:头文件名全部大写,前面加下划线,文件名中的(.)也变成下划线;如:stdio.h ——_STDIO_H

C和C++的不同:

在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用# ifndef宏定义,一个c文件多次包含同一个h文件也不会报错

但是在c++语言中,#ifndef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifndef宏定义,一个c文件包含同一个h文件多次还是会出现全局变量重定义的错误。

使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。

条件编译的用法:

1、#ifndef 标识符

程序块1

#else

程序块2

#endif

定义了编译程序块2,没有定义编译程序块1;程序块2有时候可以省略

2、#ifndef 标识符

#define 标识符

程序块1

#else

程序块2

#endif

3、#if  表达式

程序块1

#else

程序块2

#endif

表达式为真,编译程序段1,否则编译程序段2

4、#if defined (x)

       code

       # endif

程序中不管x的真假只要定义了x则执行code,否则则不执行

猜你喜欢

转载自blog.csdn.net/qq_20599225/article/details/81588901