Tag: 链接

.bss vs COMMON:到底是什么?

从我的书: .bss段: 未初始化的全局C变量 共同: 尚未分配的未经初始化的数据对象 我不得不说,我看不出明显的区别。 我甚至不太明白什么是无限制的,未分配的数据对象……似乎什么也没有。 我使用GNU的readelf工具试着看一些简单的C代码,但是找不到一个COMMON符号。 我读过像FORTRAN的COMMON类型的东西是一个COMMON符号的例子 – 但我不知道FORTRAN 有人可以为我区分这两个吗? 如果可能的话,希望用C的例子? 非常感激。 编辑 :从这篇文章中,变量c在这里: int c; int main() {} … 应该是COMMON。 但是使用objdump -t显示c在.bss中… 困惑

C中与static关键字的内部链接

我知道static是C中的一个重载关键字。在这里,我只关心它作为一个关键字用来强制内部链接。 如果你在.c文件中声明了一个全局变量,那么使用static和不使用static什么区别? 无论哪种方式,没有其他.c文件可以访问该变量,因此该变量基本上是文件的“私有”,有或没有static关键字。 例如,如果我有一个文件foo.c ,并且我声明了一个全局变量: int x = 5; 该变量x仅对foo.c代码可用(除非我在一些带有extern关键字的共享头文件中声明它)。 但是如果我没有在头文件中声明它,那么如果我输入的话会有什么不同: static int x = 5 。 无论哪种方式,似乎x在这里都有内部联系。 所以我对这方面static的目的感到困惑。