C 初始化了什么?

C 初始化了什么?,c,netbeans,gdb,ffmpeg,C,Netbeans,Gdb,Ffmpeg,我正在学习ffmpeg项目 在其中一个示例程序中: /* must be called before using avcodec lib */ avcodec_init(); /* register all the codecs */ avcodec_register_all(); 我想知道这两个函数在内部做了什么 我使用gdb查看创建了哪些全局变量,但没有找到任何变量 事实上,我的问题并不针对ffmpeg图书馆 它是关于使用外部C库的 在这些库中应该创建一些变量,我如何才能找到这些变量 我

我正在学习ffmpeg项目

在其中一个示例程序中:

/* must be called before using avcodec lib */
avcodec_init();

/* register all the codecs */
avcodec_register_all();
我想知道这两个函数在内部做了什么 我使用gdb查看创建了哪些全局变量,但没有找到任何变量

事实上,我的问题并不针对ffmpeg图书馆 它是关于使用外部C库的 在这些库中应该创建一些变量,我如何才能找到这些变量

我正在使用Netbeans作为IDE


提前感谢

我相信,您可以获得源代码并亲自查看


我相信,您可以获得源代码并亲自查看


如果它们是外部库,则并不总是能够看到所有变量。一个好的库不会有很多全局可访问的变量。它们中的大多数都是静态的或本地的,然后你就不能访问它们,所以它们对你来说没有多大关系

如果文档是好的,应该声明您可以访问和使用的所有变量、函数等。头文件也是一个很好的信息源,尽管它们并不总是告诉您如何使用所看到的内容。而且,就像在本例中一样,如果您能够获得源代码,这也是一个很好的信息源,尽管如果库非常广泛,您可能需要很长时间才能看透

添加


如果库是用调试信息编译的,并且您有源代码,那么您可能可以看到它是如何工作的,并且可以检查所有类型的变量(本地、静态、全局)。对您隐藏信息主要不是为了保密,这样做是为了使您无法访问私人信息,并且(可能是无意中)损害其保留的私人数据的完整性。正如我在一篇评论中所说的,这就是所谓的封装,在我看来,这是一种很好的编程(tm)实践。

如果它们是外部库,那么并不总是能够看到所有变量。一个好的库不会有很多全局可访问的变量。它们中的大多数都是静态的或本地的,然后你就不能访问它们,所以它们对你来说没有多大关系

如果文档是好的,应该声明您可以访问和使用的所有变量、函数等。头文件也是一个很好的信息源,尽管它们并不总是告诉您如何使用所看到的内容。而且,就像在本例中一样,如果您能够获得源代码,这也是一个很好的信息源,尽管如果库非常广泛,您可能需要很长时间才能看透

添加


如果库是用调试信息编译的,并且您有源代码,那么您可能可以看到它是如何工作的,并且可以检查所有类型的变量(本地、静态、全局)。对您隐藏信息主要不是为了保密,这样做是为了使您无法访问私人信息,并且(可能是无意中)损害其保留的私人数据的完整性。正如我在评论中已经说过的,这叫做封装,在我看来,这是一种很好的编程(tm)实践。

谢谢你,鲁迪。所以外部库可以在计算机中创建一个我无法访问的“黑色区域”,但库的其他部分可以?在我的原始帖子中,您可以看到函数avcodec_init必须在使用avcodec lib之前调用。这就是为什么我首先问这个问题的原因换句话说,如果我是一个库编写器,我需要变量a、b、c来运行其余的库函数,所以我创建init()并要求用户首先调用它。那么这些变量a,b,c应该在内存中准备好使用了,对吗?用户无法访问的内存区域?它受到了某种程度的保护?是的,你可以这么说。再次谢谢你,鲁迪。很奇怪,许多关于C编程的书都没有提到这一部分。你能给我指出一些关于C编程中内存使用、分配或封装问题的参考资料吗?好的,我现在意识到这是一个与系统编程相关的主题,无论是unix还是windows。系统编程书中总有一章是关于内存管理的。谢谢你,鲁迪。所以外部库可以在计算机中创建一个我无法访问的“黑色区域”,但库的其他部分可以?在我的原始帖子中,您可以看到函数avcodec_init必须在使用avcodec lib之前调用。这就是为什么我首先问这个问题的原因换句话说,如果我是一个库编写器,我需要变量a、b、c来运行其余的库函数,所以我创建init()并要求用户首先调用它。那么这些变量a,b,c应该在内存中准备好使用了,对吗?用户无法访问的内存区域?它受到了某种程度的保护?是的,你可以这么说。再次谢谢你,鲁迪。很奇怪,许多关于C编程的书都没有提到这一部分。你能给我指出一些关于C编程中内存使用、分配或封装问题的参考资料吗?好的,我现在意识到这是一个与系统编程相关的主题,无论是unix还是windows。系统编程书中总有一章是关于内存管理的。