首页 > c语言库的数据一般如何存放?

c语言库的数据一般如何存放?

一般情况下,一个lib或者dll的c库的初始化,都是调用一个xx_initialize函数。
我想这个过程肯定涉及到某些数据。
但是像是glfw之类的库,它的初始化函数里面没有任何参数。
那它初始化之后内部的数据怎么存放的,是直接使用全局变量吗?
好像和不提倡使用全局变量的原则不符合。


我认为“大多数书里不推荐使用全局变量”应该是指大多数教程类书籍,对于初学者来说,全局变量是很容易用错的一个地方,所以教程类书籍不推荐使用全局变量。但是不能因此就完全禁止全局变量的使用,在正确使用的情况下,全局变量能够有效的降低开发的复杂度。

而且 C 与 C++ 在全局变量上的处理也是不同的。C++ 引入了“类”这个封装机制,从而减少了全局变量的使用,而 C 中缺乏类似的机制,所以在 C 中仍然会看到很多使用全局变量保存状态的例子。


源码里面怎么写的,编译之后就怎么放。

只不过静态库会和你程序放在一起,动态库则是自己单独的空间。


既然题主提出了这个问题,那我建议你去看看Linux环境编程和编译原理,编译过程实际上分好几步,在学习C语言的时候应该都讲过了,预处理、编译、汇编、链接,大致上就是这四步,预处理就是很简单的词法分析,将预处理语句执行替换,编译就是将其编译为汇编代码,当然,也有直接编译成二进制代码的,一般情况下都是拆成两步编译汇编,在汇编完毕后,就会生成o文件,也就是二进制对象文件,这个就是包含了所有开发代码的二进制文件,里面有完整的正文段、数据段、未初始化数据段等各个固化二进制代码。最终的链接阶段就是将第三方库的二进制代码和现有的二进制代码合并,包括正文段等其他区段合并。
但是,几乎所有情况下,我们都使用了第三方的库,无论是ISO C库还是Unix提供的库,在编写代码的时候,我们只include了它的头文件,这只是为了通过编译器的语法检测。而实际的库的二进制代码,都是已经打包成了静态链接库和动态链接库,静态链接库和动态链接库区别就在于,链接时候是否将实际的二进制代码合并,还是说只合并一段引导代码,这样讲题主是否明白了。


不太确定想问的是个什么问题。

不过既然提到了glfw库,这是个开源的库,可以直接去Github上看他的源代码呀。

https://github.com/glfw/glfw

另外,多说一句,一般程序库级别的代码,数据不一定会很多,很多都只是实现一些调用逻辑和功能组合。

补充:
关于代码里面的全局变量问题,原则上是避免无谓的或者是为了偷懒使用的全局变量,但绝不是禁用全局变量。因为有些变量的的确确就是全局都需要知道的,特别是一些配置参数类型的变量。而且不少全局变量都是const的,就是为了避免引起程序混乱。

【热门文章】
【热门文章】