头文件中 ifndef/define/endif 有什么用?
1. 相同的声明可以多次出现,重复声明不是错误!
定义不可以,无论是单个文件还是多个文件,某个特定作用域(比如全局变量),不可以重复定义变量。
2. 类/结构体的定义可以在多个文件中多次出现,但是不可以在单个文件中多次出现;
3. 在C++头文件中,const和static定义的变量,可以被多个cpp包含而不报错,
但是会导致重复定义,内存开销较大,所以不要在头文件使用const或static定义变量!
4. #ifndef,#define在头文件开头,可以防止头文件的内容在单个文件多次出现,所以加上宏定义之后,就可以放心在头文件定义类了;
但是对多个文件包含同一头文件无效,所以即使加上宏定义,也不可以在头文件中定义变量,因为有被多个文件包含导致重复定义的风险。
5. 综上
①头文件一定要有条件编译判断:#ifndef,#define,可以避免头文件被同一源文件包含多次;
②对外使用的声明放在头文件;
③类的定义放在头文件
④不要在头文件使用const或static定义变量
头文件中 ifndef/define/endif 有什么用?的更多相关文章
- 头文件中ifndef/define/endif的作用以及#pragma once使用
例如:要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H//一般是文件名的大写 ············ ············ 头文件 ...
- c/c++头文件中#ifndef/#define/#endif的用法
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...
- C/C++头文件使用 #ifndef #define #endif 的原因
背景 在编译的时候,出现"redefine"的错误,最后检查才发现对应的头文件没有写正确的预编译信息: #ifndef _HeadFileName_H #define _HeadF ...
- C++ 中 #ifndef, #define, #endif 宏定义
目的:为了保证包含的内容只被程序(include) 和编译了一次.判断预处理器常量是否已被定义. 预编译将所有头文件(#include"XXX.h")用头文件中的内容来替换,头文件 ...
- 头文件中的#ifndef/#define/#endif 的作用
在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定 ...
- [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...
- 头文件里面的ifndef /define/endif的作用
c,c++里面,头文件里面的ifndef /define/endif的作用 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方: 例如:要编写头文件test.h ...
- C++头文件为什么要加#ifndef #define #endif
#ifndef 在头文件中的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时 ,就会出现大量“重定义”的错误.在头文件中实用#ifndef #de ...
- 头文件为什么要加#ifndef #define #endif
#ifndef 在头文件中的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时 ,就会出现大量“重定义”的错误.在头文件中实用#ifndef #de ...
- #ifndef #define #endif 防止头文件被重复引用
想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件 ...
随机推荐
- 接口测试中如何保持session鉴权/会话
当接口使用token鉴权时,可以直接在响应数据中提取token的值,关联到其他接口使用 如果接口使用的是session鉴权,可以使用session=resquests.Session()方法,创建一个 ...
- dephi winspy Demo
在spy+中未找到这样的功能 有个隐藏窗口的进程,相让窗口显示出来,虽然可以找到进程ID,然后再逐步找到主窗口句柄,但又没句柄发各种消息的软件. 计得以前有个窗口精灵之类的,网上找了很多,要么没有此功 ...
- git 暂存区问题
如果需要合别人的代码进来 需要暂时把自己的代码stash一下,用 git stash 放入暂存 如果需要释放出来用 git stash pop 当暂存用的越来越多,问题出现了需要清理暂存区队列,使用代 ...
- Django之form表单的数据验证
1.先导入forms模块 from django import forms 2.创建模板的类 class loginform(forms.Form): # 2.模板中的元素 name = forms. ...
- php之编译安装
1. 安装所需环境 yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng ...
- 理解Hive 不同组件的功能
Hive功能 通过将SQL转换成MR.Spark等任务,来计算HDFS中数据的工具. Hive是基于Hadoop之上的数仓工具.通过HDFS存储真实的数据,通过YARN运行计算任务(MR.Spark等 ...
- QPushButton长度固定,不随文字变化
QPushButton不随text长度变化 设置SizePolicy中的水平策略 没有设置为 忽略
- 对象存储COS成本优化方案
随着上云企业越来越多,企业对用云成本问题也越发重视.业务的发展会产生海量存储需求,在云端存储数据时,如何进行成本优化,减轻业务负担呢? 在进行成本优化之前,首先需要了解腾讯云对象存储COS的成本构成. ...
- R数据分析,codewar的年终总结,和一周年总结,寒假快乐呀
前阵子单位各个部门都在要求弄总结,想想自己这个公众号也写了快一年了,专门回去翻了翻,这个公众号发布的第一篇文章是在2021年的1月17日,我想2022年的1月17日我就把现在敲的文字推出来吧,也算是一 ...
- Python Tkinter 弹窗美化指南
在Python编程中,Tkinter是标准GUI(图形用户界面)库,它允许开发者创建桌面应用程序.尽管Tkinter提供了基本的窗口和控件功能,但默认的样式和外观往往显得单调.因此,对Tkinter弹 ...