为什么我需要实习

Why do I need extern?

本文关键字:为什么      更新时间:2023-10-16

我正在使用wglGetProcAddress在我的代码中获取GL函数。指南(https://sites.google.com/site/opengltutorialsbyaks/introduction-to-opengl-3-2---tutorial-01)的作者说我需要定义这样的函数:

extern PFNGLCREATEPROGRAMPROC glCreateProgram;

使用 extern 关键字。但是我尝试没有它并且它可以工作(编译成功完成并且程序成功使用该功能)。为什么我一般需要这个关键字,在这种情况下?

>extern告诉编译器定义的名称位于另一个编译单元中。默认情况下extern全局函数定义。因此,这涵盖了为什么它在您的情况下有效。

您必须使用它的地方是在定义和声明全局变量时。

如果编译单元需要注意全局变量(例如互斥锁),则需要使其在该单元中可用。但是,如果您这样做:

int a; // in global scope

编译器将尝试在程序静态内存中为其分配内存,并给出一个编辑错误。 extern来拯救我们。通过写作:

extern int a;

我们为全局提供声明,但不为其分配内存。

但是由于不鼓励使用全局变量,因此您很少会看到它被使用。