头文件ifndef用法及意义#pragma once

简介: 头文件ifndef用法及意义#pragma once

头文件定义

所有头文件都应该使用 #ifndef来防止头文件被多重包含, 举个例子

写三个文件,main.c head1.h head2.h

main.c

#include <iostream>
#include "head1.h"
#include "head2.h"
using namespace std;
int main(){
  cout << "Hello World!\n";
  return 0;
}

head1.h

#ifndef HEAD1_H_
#define HEAD1_H_
int i;
#endif // !HEAD_H_

head2.h

#include "head1.h"

运行程序是没有问题的

假如我们将head1.h中的条件定义删掉,就只留下一个变量的声明

head1.h

int i;

执行程序会导致重定义错误

因为我们head2.h包含了#include这个head1.h的头文件,预编译的时候会重复编译这个头文件的内容,因此会导致重定义

HEAD1_H_的命名规则

按照谷歌的代码规范

我们可以将文件路径也加上,其中的’_‘符号没有任何语法意义,加上表示头文件的’.‘符号或者‘/’符号。因为“.”不能作为标识中的字符。

某些资料也说系统自带的头文件会前后各加两个下划线__,用户自己编写的头文件可以不用双下划线__,以表示与系统头文件的区别。看自己习惯。

#pragma once

#pragma once和这种宏实现方式一样,平时使用并没有什么区别

因此我们

head1.h

#pragma once
int i;

这么写,我们的程序也是没有问题的。

区别:#ifndef是依赖于我们定义的宏名字不能冲突(如果我们不小心宏名字定义冲突了,over)

#progma once依赖于编译器,同一个文件不会被包含多次(较老的编译器可能会报错)

目录
相关文章
路径损耗计算模型 | 带你读《大规模天线波束赋形技术原理与设计 》之二十五
本小节介绍 3D 信道的路损模型,是以 ITU 信道为基础拓展得到的。
14164 0
路径损耗计算模型  | 带你读《大规模天线波束赋形技术原理与设计 》之二十五
|
存储 Cloud Native Linux
malloc、free 和 new、delete 的区别
malloc、free 和 new、delete 的区别
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
12月前
|
前端开发 JavaScript 程序员
WordPress免费主题:Document,让阅读变得更加方便
“Document”的主题以方便记、方便查、简约为核心设计理念,适合用作文档类博客。功能包括文章目录导航、黑夜/白天模式切换、代码高亮与一键复制、自定义小部件等。支持SEO优化及多种前端交互效果。提供Github和Gitee开源地址,用户可下载后上传至WordPress主题目录并启用。主题持续更新中
699 58
|
分布式计算 关系型数据库 数据处理
OceanBase 在金融行业的应用案例
【8月更文第31天】随着金融行业的快速发展,数据量的急剧增长和对数据处理能力的需求日益增加,传统的数据库解决方案已经难以满足现代金融机构对于高性能、高可用性和大规模扩展性的需求。在这种背景下,分布式数据库应运而生,其中OceanBase作为一款由阿里巴巴自主研发的分布式关系型数据库,在金融行业得到了广泛的应用。
896 0
|
Ubuntu Shell
蓝易云 - ubuntu修改默认文件权限umask
以上就是在Ubuntu中修改默认文件权限umask的方法。
398 0
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
602 33
|
存储 算法 C++
【C++ 包装器类 std::tuple】全面入门指南:深入理解并掌握C++ 元组 std::tuple 的实用技巧与应用(三)
【C++ 包装器类 std::tuple】全面入门指南:深入理解并掌握C++ 元组 std::tuple 的实用技巧与应用
610 0
|
缓存 NoSQL API
分布式锁工具:Redisson,很强!
分布式锁工具:Redisson,很强!
716 1

热门文章

最新文章