文件中的#ifndef.#define, #endif 很关键,是为了避免多重包含,比如如果两个C文件同时包含同一头文件,那么就会出现问题,所以使用这种方法可以有效避免这种情况。

一般用法:

以add.h为例

1 #ifndef  _ADD_H_
2 #define _ADD_H_
3
4 //在这里包含add.h的类定义及变量和函数的声明
5 比如函数声明:int add(int a ,int b);  //分号是必须加上的
6
7 #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;
}

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

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

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

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

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

4.头文件的使用:

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

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

注意事项:

变量最好不要定义在.h文件中,具体原因还未深究,在一处博客看到过。

#ifndef.#define, #endif 的用法相关推荐

  1. c/c++头文件中#ifndef/#define/#endif的用法

    想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...

  2. #ifndef#define#endif的用法

    你所遇到的这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译&qu ...

  3. #ifndef#define#endif的用法(整理)

    1.头文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题 ...

  4. C++ ifndef /define/ endif 作用和用法

    ifndef/define/endif"主要目的是防止头文件的重复包含和编译 比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件 ...

  5. ifndef/define/endif——主要目的是防止头文件的重复包含和编译

    原文:http://www.jb51.net/article/100939.htm 原文:https://blog.csdn.net/abc5382334/article/details/180527 ...

  6. #pragma once 和 #ifndef ... #define ... #endif 的区别

    这两者都是为了防止文件被包含多次.但是有些细微的区别: 1,来源的区别:#pragma once 是编译系统相关的,由编译器提供.而#ifndef ...#define ... #endif 是c/c ...

  7. #ifndef #defin #endif的用法

    #ifndef #defin #endif的用法: 1. 当有两个c文件,并且两个c文件都include了同一个头文件,在编译为同一个可运行文件时就会产生大量声明冲突. 所以就需要将头文件的内容都放在 ...

  8. c:#ifndef, #define, #endif 作用

    #ifndef, #define, #endif 作用 #ifndef 它是if not define 的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义.文件包含.条件编译)中的 ...

  9. [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较

    C++中防止头文件被多次include 的常见方式有: 1) 用#ifndef ...  #define ... #endif  宏 #ifndef __MYHEADER_H__ #define __ ...

最新文章

  1. mcs 4微型计算机,MCS-II高性能自主品牌的微机测速仪
  2. java dbtype_Java实现数据库的读写分离
  3. 湖南打工妹逆袭成为身价5亿“网络第一红娘”
  4. 隐藏a标签seo_SEO网站优化,新手SEO常犯的五个错误!
  5. JAVA网络编程→BIO到NIO、IP域名服务器DNS端口、套接字编程Socket、TCP与UDP
  6. skynet源码分析5:lua绑定之地基
  7. RHEL5远程部署操作指导手册
  8. jquery简单的选择添加下拉列表
  9. javaScript中的垃圾回收机制
  10. 08_MySQL的函数
  11. 模式识别的常用英文总结
  12. c语言贾宗璞答案,c语言答案 贾宗璞、许合利
  13. ARM开发板 瑞芯微RK3288开发板
  14. ebs 供应商地点信息_EBS R12使用接口表往已存在的供应商地址下创建新的地点
  15. 借力《旅行青蛙》,阿里手游便可叫板腾讯、网易?
  16. C#中无法将文件“obj\x86\Debug\xxx.exe”复制到“bin\Debug\xxx.exe”。文件“bin\Debug\xxx.exe”正由另一进程使用,因此该进程无法访问此文件.
  17. 【STM32】 Keil程序开发环境
  18. [附源码]Python计算机毕业设计电影售票管理系统
  19. 基于内容的电影推荐:物品画像
  20. 产品设计常用链接和资源

热门文章

  1. jqury ajax跳转界面,jquery ajax 界面跳转失败解决方案
  2. c语言调用tensorflow模型,C++调用Python中的Tensorflow模型
  3. FPGA学习之路—Vivado与Modelsim联合仿真
  4. ubuntu qt linux 下载文件,Qt ------ linux(ubuntu) 下用 linuxdeployqt 打包发布程序
  5. android 通讯录字母排序,Android仿微信联系人字母排序效果
  6. 全志r11_全志R328 Demo开发板;全志R333开发板/核心板;全志R11开发板/核心板;全志R16开发板/方案设计...
  7. html中按钮下拉菜单,CSS 下拉菜单
  8. java连接数据库代码写在哪里,jdbc连接数据库怎么做的。代码写哪里呀 求大神
  9. oracle导入del数据文件,pl/sql,Oracle数据库中,不小心delete数据并递交后如何恢复被删数据...
  10. 工具 转_微信文章转 PDF 桌面工具