1. C++中头文件(.h)和源文件(.cpp)都应该写些什么:
总结下来就是头文件写的就是类的声明(包括类里面的成员和方法的声明)和函数的声明,但一般来说不写出具体的实现。对应的同名(可以不同名,但出于编程习惯最好同名)源文件来写出具体的实现,当然这个实现的源文件里必须要include对应的头文件,这样能保证声明和定义对应实现完整性,这是因为编译器在编译代码时,只会去编译.cpp格式的源文件,并且预编译器会递归的把.cpp所有#include的头文件都“拷贝”到.cpp文件中去。然后main文件或者其他文件如果想要调用实体时(比如变量或函数)只用include相应的头文件,因为变量在使用前就要被定义或者声明,这里即指只用声明即可,因为编译器会在链接时去找对应的声明的实现。
https://blog.csdn.net/lyanliu/article/details/2195632

2. 在写头文件时在开头和结尾处必须按照如下样式加上预编译语句#ifndef #define endif,有什么作用?
https://blog.csdn.net/qq_45507472/article/details/117928374?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-117928374-blog-80727293.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-117928374-blog-80727293.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=2

3. 命名空间和头文件的区别与联系
1)命名空间一般是放在头文件中的:



2)想要在头文件对应的源文件里实现命名空间mine中的display()函数,则必须采用下图一的void mine::display()实现方式。不能在mine.cpp中直接加using namespace mine来实现,然后直接实现display()这个函数,因为这样操作的话其实有个歧义,就是在mine.cpp中,这个display函数的定义到底是属于mine命名空间的还是不属于任何命名空间的一个函数呢? 所以这样是会报错的。



https://blog.csdn.net/jyx1572676601/article/details/121719373?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%20%E5%A4%B4%E6%96%87%E4%BB%B6&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-121719373.142v33pc_rank_34,185v2tag_show&spm=1018.2226.3001.4187

4.C++中内部链接和外部链接,编译器如何根据头文件来找到相应实现的cpp文件?
1)什么是内链接和外链接:我们知道,其实编译器在编译代码时,只会去编译.cpp格式的源文件,并且预编译器会递归的把.cpp所有#include的头文件都“拷贝”到.cpp文件中去,之后对这个文件再进行编译,生成二进制的.obj文件。那么其实每一个.cpp文件都是一个编译单元。每个编译单元是独立,互相看不到对方,是通过链接器才能产生关联。在这里首先要知道清楚声明和定义的区别,声明:用于向程序表明变量或函数的类型和名字。定义:用于为变量和函数分配存储空间,还可为变量指定初始值。在一个程序中,变量或函数只能定义一次,却可以声明多次。(定义也是声明:当定义变量时我们声明了它的类型和名字)。内链接就是那些编译单元(.cpp)中不能向其他编译单元(.cpp)展示提供其定义的函数、变量。那么这个实体(比如变量或函数)就拥有内部链接。外链接的定义就恰好相反,一个多文件的程序中,一个实体可以在链接时与其他编译单元交互,那么这个实体就拥有外部链接。换个说法,那些编译单元(.cpp)中能向其他编译单元(.cpp)提供其定义,就说这些实体拥有外部链接。
https://blog.csdn.net/isscollege/article/details/73851795
2)编译器不管头文件的,所以头文件和源文件取名不一样也没关系,头文件只是用来被cpp文件包含的,被包含之后,它就成了那个cpp文件的一部分了,而编译器只编译.cpp文件,不会去单独编译一个头文件的。编译器这样做之后,针对每个编译过的cpp文件生成一个obj文件。然后链接器把所有这些obj文件链接成一个程序或者是exe或dll(或做成静态的lib)。如果在链接的过程中,有些实体(比如变量或函数)找不到定义,则会报link错误,这还没完,链接的时候也会检查,比如某个函数f在不同的cpp文件中出现了多次定义,而且都是外链接,那链接器也会报重复定义地错误。
3)对于模板,声明和定义都要写在一起放在头文件。

C++中头文件(.h)和源文件(.cpp)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接相关推荐

  1. C++中头文件(.h)和源文件(.cpp)都应该写些什么

    原文出处:https://www.cnblogs.com/fenghuan/p/4794514.html 头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, ...

  2. C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)

      头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下 ...

  3. html预编译语句,头文件为啥加预编译语句

    头文件为什么加预编译语句? typedef int ElementType; /* START: fig3_6.txt */ #ifndef _List_H #define _List_H struc ...

  4. C++声明与定义、内部链接与外部链接的意义

    一. 声明与定义 A. 大多数情况下,声明与定义是相同的,但是有少些情况下,声明并非定义,而定义又非声明: 1.是声明,但是并不是定义: 1) 声明了一个没有具体说明函数体的函数: void decl ...

  5. 网站应该更注重内部链接还是外部链接?

    在搜索引擎上,去获取流量的最基本单位就是网页.一个网页的外部链接因素,对这个网页的排名影响很大.这个网页的外部链接,既有同一个网站的其他页面给的站内链接,也有其他网站上的网页给的站外链接.下面文章里的 ...

  6. 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?

    转载自   从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的? 先回顾一下Java程序执行的过程: Java程序执行时,第一步系统创建虚拟机进程,然后虚拟器用类加载器Class Loade ...

  7. 内部链接和外部链接【转】

    from here 首先,我们来了解下定义: 内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时候其他的编译单元无法链接到它. 外部连接:如果一个名称对编译单元来说不是局部的,而在链 ...

  8. 超链接的内部链接和外部链接

    <a href="http://www.baidu.com">外部链接</a> <a href="a.html">内部链接& ...

  9. 超链接——内部链接、外部链接、锚点链接、下载链接、空链接、其他元素链接

    一.内部链接 first.html 和second.html在同一文件内,想在first.html中通过超链接跳转到second.html中,可以通过内部链接实现. <a href=" ...

最新文章

  1. c# 持续集成 单元测试_如何在不进行单元测试的情况下设置持续集成
  2. 应用在大规模推荐系统,Facebook提出组合embedding方法 | KDD 2020
  3. /etc/issue、shutdown练习
  4. vue 多页面iframe不刷新_Vue中iframe保持活动状态(不刷新)
  5. java icomparer_集合数据处理(C#、JavaScript 和 Java)
  6. 【ICCV-2019】ACNet:通过非对称卷积块增强CNN的核骨架 3*3卷积==>1*3卷积+3*1卷积=白给的精度提升
  7. File,FileInputStream,FileReader,InputStreamReader,BufferReader 的区别使用
  8. The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
  9. 这个城市正式将电子烟纳入控烟管理 10月1日起实施
  10. Agilent RF fundamentals (2)- fundamental units of RF
  11. 從零開始學 ReactJS:最完整的 React 生態系入門教程
  12. faststone capture没声音
  13. zabbix开启网页报警声音方法:网页也可以有报警声音(46)
  14. 阿里云服务器上传下载速度测试(Speedtest带宽测试工具)
  15. 基于canvas图像处理的图片 灰色图像
  16. 虚拟机和linux有啥关系,linux有什么虚拟机
  17. 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽
  18. 设置EditText输入的文字全部变成大写或小写方案总结
  19. 这款开源的STM32外设驱动库,可以直接拿来用!
  20. Java游戏开发——对对碰

热门文章

  1. Intent 和 Intent 过滤器
  2. KL divergence,JS divergence,Wasserstein distance是什么
  3. vue js根据生日计算年龄(包含阳历和农历)
  4. 中国实践对接新营销时代 ,腾讯刘胜义对话“营销学之父”科特勒
  5. Yaml编程语言学习
  6. 森川机器人自动化_天津森川机器人自动化有限公司邀请您参加天津工博会—自动化展...
  7. 实用的无线供电模块 公布原理图
  8. mysql t-sql语句_SQL语句:T-SQL的用法和语法
  9. 用IDEA工具实现Maven操作PDF,WORD,PICTURE 案例
  10. 空投:实现去中心化、建立DAO的必经之路