我为什么需要extern?

时间:2012-09-15 00:22:11

标签: c++ extern

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

extern PFNGLCREATEPROGRAMPROC glCreateProgram;

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

1 个答案:

答案 0 :(得分:3)

extern告诉编译器定义的名称在另一个编译单元中。 默认情况下,全局函数定义为extern。这就是为什么它适用于你的情况。

使用它的地方,就是在定义和声明全局变量时。

如果有一个全局变量需要知道编译单元(例如互斥锁),则需要在所述单元中使其可用。但如果你这样做:

int a; // in global scope

编译器将尝试在程序静态内存中为其分配内存,并将产生重定义错误。 extern来到我们这里救援。写下:

extern int a;

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

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