为什么要有申明

本文介绍了C++20中import的使用,以及编译时头文件、静态库和动态库的查找顺序。强调了声明和定义的区别,声明用于编译阶段,定义涉及内存分配,且只能有一个。还探讨了插件原理,涉及类的多态和动态库的查找。同时指出头文件对于插件的重要性在于确保编译通过和符号表匹配。
摘要由CSDN通过智能技术生成

根据头文件找函数的实现,先找静态库,再找动态库
c++20实现import
#include 与define类似,就是把.h文件中的字符串复制一份到.cpp中,所以要注意.h中尽量只声明函数,不要定义函数,不然会出现重复定义的错误。解决方法:#ifndef #define

声明的作用
告诉编译器某个未定义的函数的类型,从而方便编译通过,生成.o文件,.o文件里会有这些未定义的函数的符号表。链接器会根据符号表从.so或者.a库中找到函数定义并生成可执行程序。
c和cpp编译器只能编译一个文件,生成.o文件,n个文件的程序会生成n个.o文件,然后把这n个文件链接到一起生成一个大的.o文件,然后再链接外部库,最终生成可执行程序。
java python等都是直接在编译阶段找到函数定义然后直接生成可执行程序。cpp不这么做主要是历史遗留问题,当时编写一个程序可能是用不同语言编写的,为了把不同语言的的文件结合成一个程序,需要先编译生成二进制.o文件,然后统一链接。

插件原理
类的多态,运行时根据主体程序中的符号表和和路径,从而定位不同动态库。
插件需要头文件的原因:
主程序能够调用未实现头文件,可以编译通过

extern表面已经声明了
源文件编译成.o后会带符号表,符号表里有类名的字符串,

声明是告诉编译器这个名字是什么类型,是函数,还是类 还是其他
定义是为这个名字分配存储空间
声明和定义有可能在同一个地方,也有可能在不同地方

首先,声明是必须的。
在代码中引用一个名字时编译器首先需要知道这个名字的具体类型,以便生成相应的指令,不然会引起混淆。
所以如果多个文件引用同一个名字,在每个文件中都需要有声明。

其次,定义只能有一个。
由于定义需要分配存储空间,多次定义会导致多次空间分配。

基于以上两点原因:声明需要有多个,而定义只能有一个,所以要把声明和定义分开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值