zoukankan      html  css  js  c++  java
  • 第三十一篇 -- 理一下.h和.cpp的关系

    今天突然想到一个问题,我们平时写代码会将代码进行分类,写到不同的cpp里,然后要用到那个类里面的函数,就直接include .h文件就好了。然后今天就在想,.h里面都是一些声明,它是怎么链接到.cpp的呢,是不是.h和.cpp需要名称相同呢,当然,我试过名称不同也是可以的。就是因为这样,我才有了疑问,为什么引入.h文件就可以用相关的函数,他们是怎样关联的。因此我做了一个实验:

    第一步,创建一个项目,主文件是main.cpp,然后创建了a.h和a.cpp,a.cpp中#include "a.h",在a.h声明void printHello(),在a.cpp里面实现它输出"hello a file"。然后main.cpp里面#include "a.h",直接调用printHello(); 成功输出hello a file。

    第二步,创建一个b.cpp,b.cpp中#include "a.h",同样在b.cpp里面实现输出"hello b file"。然后运行,报错,说函数重定义。

    第三步,将b.cpp文件里的函数名改为printHello1,在a.h中添加一个声明void printHello1(),在main.cpp里面再调用一个函数printHello1();成功输出“hello a file”“hello b file”。

    第四步,在.h里面声明void printHello2(),运行,报错,printHello2()函数没有实现

    从这个实验中可以看出来,在一个项目中,.h里面的函数必须都有实现,并且实现不能重定义,不然会报错,后来查了一下资料,里面有说到.h这个头文件只参与编译,保证编译通过,而要真正用到函数的部分,其实是在链接部分,这个是内部进行操作的,会有一个makefile文件进行文件链接,指向哪个.o或者.obj。.o和.obj就是.cpp文件编译后产生的文件。

    未免以后又纠结这个问题,特做一下记录。

  • 相关阅读:
    课后总结
    构建之法阅读笔记01
    软件工程周总结02
    开课博客
    二维数组最大子数组和
    大二下周总结四
    大二下周总结三
    定义一个整型数组,返回该数组中子数组和的最大值
    软件工程开课
    定义一个数组返回最大子数组的值(1)
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/11647467.html
Copyright © 2011-2022 走看看