3

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

extern PFNGLCREATEPROGRAMPROC glCreateProgram;

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

4

1 回答 1

3

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

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

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

int a; // in global scope

编译器将尝试在程序静态内存中为其分配内存,并给出重新定义错误。extern来这里救我们。通过写作:

extern int a;

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

但是由于不鼓励这样使用全局变量,你很少会看到它在使用中。

于 2012-09-15T00:33:09.263 回答