预处理器#ifndef,#define,#endif 的用法

来源:互联网 发布:大数据对教育的作用 编辑:程序博客网 时间:2024/06/05 09:06

一、定义


#define x //定义一个宏
...
#endif
//C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。
#ifndef x //先测试x是否被宏定义过
#define x
程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1
#else
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1。
#endif//终止if

二、作用


条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。了解:条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。如果条件选择的程序段很长,采用条件编译的方法是十分必要的。

三、一般用法
////////////////////////////////////////////////////////////////////////////////////
以add.h为例

#ifndef  _ADD_H_
#define _ADD_H_

//在这里包含add.h的类定义及变量和函数的声明
比如函数声明:int add(int a ,int b);  //分号是必须加上的
 
#endif  //_ADD_H_

//////////////////////////////////////////////////////////////////////////////////////
编写add.cpp文件

#include"add.h"
int add(int a , int b)
{
  return a+b;  
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

主函数main.cpp文件


#include <iostream>
#include "add.h"
using namespace std;

int main()
{    
    int a ;
    a = add(2,3);
    cout<<a<<endl;
    return 0;
}


//////////////////////////////////////////////////////////////////////////////////////

相关错误:

如果在h文件中去掉一下内容:

#ifndef  _ADD_H_
#define  _ADD_H_

#endif

并且在某一个cpp中写了如下代码段:

#include"add.h"

#include"add.h"

……

那么会出现错误"重复定义class add ”


四、几点注意事项


1.程序中_ADD_H_为预处理器变量,书写格式一般是头文件名大写,前后加下划线,“.”用下划线代替。比如stdio.h表示为_STDIO_H_.

2.预处理器变量一般有两种状态:已定义或未定义

 #ifndef 指示检测指定的预处理器变量是否未定义,如果未定义,那么跟在后面的所有指示被处理,直到出现#endif;如果已定义,那么#ifndef测试为假,该指示和#endif指示间的代码都被忽略。

 #define 指示接受一个名字并定义该名字为预处理器变量。

3.在调用该头文件时一般用#include "add.h".

4.头文件的使用:

  如果头文件名包含在<>中,那么认为该头文件是标准头文件。编译器将会在预定义的位置集查找该头文件,这些预定义的位置可以通过设置查找路径环境变量或者通过命令行选项来修改

  如果头文件名包含在"  "中,那么认为它是非系统文件,非系统文件的查找通常开始于源文件所在的路径
0 0
原创粉丝点击