头文件中 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来包含这个头文件 ...
随机推荐
- ubuntu 安装使用 mytop
apt搜索一下 $ sudo apt search mytop Sorting... Done Full Text Search... Done mytop/focal,focal,now 1.9.1 ...
- vue-quill-editor 自定义图片上传和视频上传
安装 npm install vue-quill-editor --save 在main.js 引入 import 'quill/dist/quill.core.css' import 'quill ...
- JAVA并发编程学习笔记之CLH队列锁
NUMA与SMP SMP(Symmetric Multi-Processor),即对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同.其主要特征是共享,包含对CPU,内 ...
- npm之基本使用
# 查看镜像源 npm config get registry # 设置镜像源 # 腾讯云 npm config set registry http://mirrors.cloud.tencent.c ...
- Select、Poll、Epoll 有什么区别?
部分图片来源于:https://www.cnblogs.com/yanguhung/p/10145755.html I/O模型 BIO:同步阻塞IO 应用程序发起调用以后,一直阻塞,等待结果返回 2. ...
- canvas(三)绘制矩形
1.绘制矩形轨迹 相关语法:ctx.rect(x,y,width,height),根据传入的参数(起始坐标和宽高)用来绘制一个矩形轨迹 注意:ctx.rect()和ctx.lineTo()绘制的都是轨 ...
- OpenTelemetry 101:面向 IT 领导者和爱好者的非技术指南
如果您从事软件开发. SRE或DevOps工作,您可能听说过可观察性.遥测和跟踪等术语.这些概念对于理解应用程序在生产环境中的行为至关重要,并且它们是现代软件开发实践的重要组成部分. 您可能还听说过在 ...
- 中电金信:院长寄语|关于源启AI+行动的思考
自2022年8月19日发布以来,源启已经走上了她第三年的征途.今天,源启已经成为公司战略的支点,中电金信正致力于用"源启底座""源启+咨询""源启+应 ...
- 【Python】2023年Python期末复习题
Python百分百挂科指南 出题人,出的题,水平不咋样,给出的参考答案一堆错误,给出的正确选项单词都能拼错. 非本次考试人员不必看,没有参考价值 选择题 下列哪个标识符是不合法的()D A. Name ...
- 免费学习基于SpringBoot的高考志愿智能推荐系统
免费学习基于SpringBoot的高考志愿智能推荐系统 摘要 科学技术日新月异,人们的生活都发生了翻天覆地的变化,高考志愿智能推荐系统管理当然也不例外.过去的信息管理都使用传统的方式实行,既花费了时间 ...