C++中头文件(.h)和源文件(.cpp)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接
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)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接相关推荐
- C++中头文件(.h)和源文件(.cpp)都应该写些什么
原文出处:https://www.cnblogs.com/fenghuan/p/4794514.html 头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, ...
- C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)
头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下 ...
- html预编译语句,头文件为啥加预编译语句
头文件为什么加预编译语句? typedef int ElementType; /* START: fig3_6.txt */ #ifndef _List_H #define _List_H struc ...
- C++声明与定义、内部链接与外部链接的意义
一. 声明与定义 A. 大多数情况下,声明与定义是相同的,但是有少些情况下,声明并非定义,而定义又非声明: 1.是声明,但是并不是定义: 1) 声明了一个没有具体说明函数体的函数: void decl ...
- 网站应该更注重内部链接还是外部链接?
在搜索引擎上,去获取流量的最基本单位就是网页.一个网页的外部链接因素,对这个网页的排名影响很大.这个网页的外部链接,既有同一个网站的其他页面给的站内链接,也有其他网站上的网页给的站外链接.下面文章里的 ...
- 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?
转载自 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的? 先回顾一下Java程序执行的过程: Java程序执行时,第一步系统创建虚拟机进程,然后虚拟器用类加载器Class Loade ...
- 内部链接和外部链接【转】
from here 首先,我们来了解下定义: 内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时候其他的编译单元无法链接到它. 外部连接:如果一个名称对编译单元来说不是局部的,而在链 ...
- 超链接的内部链接和外部链接
<a href="http://www.baidu.com">外部链接</a> <a href="a.html">内部链接& ...
- 超链接——内部链接、外部链接、锚点链接、下载链接、空链接、其他元素链接
一.内部链接 first.html 和second.html在同一文件内,想在first.html中通过超链接跳转到second.html中,可以通过内部链接实现. <a href=" ...
最新文章
- c# 持续集成 单元测试_如何在不进行单元测试的情况下设置持续集成
- 应用在大规模推荐系统,Facebook提出组合embedding方法 | KDD 2020
- /etc/issue、shutdown练习
- vue 多页面iframe不刷新_Vue中iframe保持活动状态(不刷新)
- java icomparer_集合数据处理(C#、JavaScript 和 Java)
- 【ICCV-2019】ACNet:通过非对称卷积块增强CNN的核骨架 3*3卷积==>1*3卷积+3*1卷积=白给的精度提升
- File,FileInputStream,FileReader,InputStreamReader,BufferReader 的区别使用
- The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
- 这个城市正式将电子烟纳入控烟管理 10月1日起实施
- Agilent RF fundamentals (2)- fundamental units of RF
- 從零開始學 ReactJS:最完整的 React 生態系入門教程
- faststone capture没声音
- zabbix开启网页报警声音方法:网页也可以有报警声音(46)
- 阿里云服务器上传下载速度测试(Speedtest带宽测试工具)
- 基于canvas图像处理的图片 灰色图像
- 虚拟机和linux有啥关系,linux有什么虚拟机
- 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽
- 设置EditText输入的文字全部变成大写或小写方案总结
- 这款开源的STM32外设驱动库,可以直接拿来用!
- Java游戏开发——对对碰
热门文章
- Intent 和 Intent 过滤器
- KL divergence,JS divergence,Wasserstein distance是什么
- vue js根据生日计算年龄(包含阳历和农历)
- 中国实践对接新营销时代 ,腾讯刘胜义对话“营销学之父”科特勒
- Yaml编程语言学习
- 森川机器人自动化_天津森川机器人自动化有限公司邀请您参加天津工博会—自动化展...
- 实用的无线供电模块 公布原理图
- mysql t-sql语句_SQL语句:T-SQL的用法和语法
- 用IDEA工具实现Maven操作PDF,WORD,PICTURE 案例
- 空投:实现去中心化、建立DAO的必经之路