C| |头文件中为什么只声明不定义,而类定义又可以放在头文件中

网友投稿 274 2022-11-25

C| |头文件中为什么只声明不定义,而类定义又可以放在头文件中

首先要了解几个基本概念:

编译单元对于c语言,每一个.c文件就是一个编译单元。仅仅从编译来说,各个编译单元之间没有联系

未解决符号表提供了在该编译单元引用,但是定义不在本编译单元的符号的地址(拥有者是编译单元)

导出符号表提供了本编译单元具有定义,而且可以提供给其他编译单元使用的符号和地址(拥有者是编译单元)

.c文件被编译后每个编译单元都会生成两张表,未解决符号表和导出符号表

链接链接的时候每个编译单元就会向其他的编译单元的导出符号表查找自己未解决符号表中的符号。

如果在其他编译单元查到未解决符号表中的符号,就汇报

没有找到的话,哪些未解决的符号就会进入未解决符号表。

externextern就是告诉编译器这个符号的定义在别的编译单元中,符号会放在未解决符号表中

staticstatic就是告诉编译器这个变量或函数的符号只在该编译单元中使用,不放在导出符号表中。也就是链接的时候看不到

对于类来说,链接的时候默认为内部链接,是static;而函数默认为外部链接,函数名会放到导出符号表中,所以函数想只在内部调用时,添加修饰符static

【问题】:

假如有一个头文件中有变量的定义,当这个头文件被多个.c文件包含的时候,在链接的时候就会在不同的编译单元导出符号表中查找出重复的定义,就会报错

类可以定义在头文件中的原因

类的定义默认是static,内部链接,在其他的编译单元不可见,即使被重复包含

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:创基usb hub集线器诞生了可以以一敌八
下一篇:Java实现synchronized锁同步机制
相关文章

 发表评论

暂时没有评论,来抢沙发吧~