C++易混淆:.h头文件的原理及作用粗浅解释

发布时间:2024年01月16日
参考:C/C++ 头文件的粗浅理解_哔哩哔哩_bilibili?

? ? ? ? ? ?【10】C++头文件_哔哩哔哩_bilibili?

1.头文件是什么?为什么需要头文件?

头文件通常用于声明某些类型的函数,以便这些函数能够被使用到我的程序当中,比如,我们在一个文件中创建函数,但我们想在另一个文件中使用它----此时我们就需要一个公共的地方来存放这些东西。

2.举一个简单的例子

1.首先,在main.cpp中写一个简单的函数:log()

2.让我们尝试着创建一个log.cpp文件,来解释上述的需要一个“公共的地方”到底是什么意思

?3.在log.cpp中尝试调用log()函数,发现报错

?Q: How do we tell that 'log' function does exist,but it was just defined elsewhere.

? ? ?如何判断我们写过的log函数的确存在,但只是因为它在别处定义了呢?

3.头文件----我们想要的‘公共区域’(header files)

#include具有‘复制粘贴’的能力,将一个文件copy到另一个文件

1.让我们试试创建一个头文件log.h来解决上面的问题吧

2.在log.h中声明函数

? ? ? ---注意只写声明,不要写函数的定义,不然会在.cpp和.h中造成函数的重复定义

3.在log.cpp中使用#include log.h,点击运行就不会再有报错

4.#pragma once有什么用?
#pragma once
//首先,任何以”#“开头的命令,都被称为《预处理器命令》或者《预处理器指令》-这意味着它将会被优先处理
//pragma once-->只包括这个文件一次,组织我们单个头文件被多次包含
/*
 * include的工作原理是“复制和粘贴文件到其他文件”,所以,在创建commom.h文件which included log.h
 * 在log.cpp中同时#include log.h和common.h时
 * 定义的结构体player就会产生重复,从而导致程序报错
 * 所以,在头文件.h中添加#pragma once 可以避免这样的错误
 */

//创建一个名为player的结构体,因为结构体的名字必须是唯一的;that's what pragma for
struct player{};
5.#ifndef有什么用?

在新建任意.h头文件时,发现Clion编译器自动生成了如下三条语句?,我想知道它有什么用?

#ifndef与#pragma once的功能相同,都是为了使得文件只被复写“仅一次”,从而避免“重定义”redefination.

书写格式:在define后面声明我们的东西

文章来源:https://blog.csdn.net/m0_72979740/article/details/135577477
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。