Зачем мне экстерн?

Я получаю функцию GL в моем коде, используя wglGetProcAddress. Автор руководства (https://sites.google.com/site/opengltutorialsbyaks/introduction-to-opengl-3-2—tutorial-01) говорит, что мне нужно определить такие функции:

extern PFNGLCREATEPROGRAMPROC glCreateProgram;

Используя ключевое слово extern. Но я пытался без него, и он работает (компиляция успешно завершена, и программа успешно использует функцию). Зачем мне это ключевое слово вообще и в этом случае?

3

Решение

extern сообщает компилятору, что определенное имя находится в другом модуле компиляции.
Глобальное определение функции extern по умолчанию. Итак, это объясняет, почему это сработало в вашем случае.

Место, где вы бы иметь использовать его, это при определении и объявлении глобальных переменных.

Если есть глобальная переменная, о которой необходимо знать единицу компиляции (например, мьютекс), необходимо сделать ее доступной в упомянутом модуле. Но если вы сделаете это:

int a; // in global scope

Компилятор попытается выделить для него память в статической памяти программ и выдаст ошибку повторного определения. extern приходит к нам на помощь здесь. Написав:

extern int a;

Мы предоставляем объявление для глобального, но не выделяем память для него.

Но так как такое использование глобалов не рекомендуется, вы редко увидите его в использовании.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector