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

参考: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后面声明我们的东西

相关推荐

  1. C++Web文件: Hacker.h

    2024-01-16 19:54:01       51 阅读
  2. <ctype.h文件C 语言字符处理函数详解

    2024-01-16 19:54:01       58 阅读
  3. <math.h文件C语言数学库函数

    2024-01-16 19:54:01       56 阅读
  4. Makefile: 解决.c文件依赖.h文件问题

    2024-01-16 19:54:01       20 阅读
  5. 编程参考 - stdint.h文件使用

    2024-01-16 19:54:01       39 阅读
  6. C语言从头学05——文件文件

    2024-01-16 19:54:01       28 阅读
  7. C语言 getchar()原理错点解析

    2024-01-16 19:54:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 19:54:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 19:54:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 19:54:01       87 阅读
  4. Python语言-面向对象

    2024-01-16 19:54:01       96 阅读

热门阅读

  1. Linux 挂载卸载 设备

    2024-01-16 19:54:01       56 阅读
  2. 动态表达式树(Expression Tree)来实现动态筛选

    2024-01-16 19:54:01       56 阅读
  3. 【MySQL】MySQL 专项练习

    2024-01-16 19:54:01       50 阅读
  4. 【精选】samba服务的下载和使用 (超详细)

    2024-01-16 19:54:01       55 阅读
  5. chrome浏览器并发限制及其突破手段

    2024-01-16 19:54:01       45 阅读
  6. Day27- 贪心算法part01

    2024-01-16 19:54:01       51 阅读
  7. 49-定时器,倒计时,清除定时器,延迟器

    2024-01-16 19:54:01       59 阅读