Я читал о классе внешнего хранилища с этого веб-сайта:
https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
и вот такой пример:
#include "somefile.h"
extern int var;
int main(void)
{
var = 10;
return 0;
}
Предположим, что somefile.h имеет определение var
Поскольку мы не можем определить переменную, которая является классом внешнего хранилища, как она работает правильно?
Означает ли это, что если внешняя переменная уже определена где-то в скрипте, а затем, если я еще раз определю ее в своем коде, она будет работать?
Вы должны сделать наоборот: определить переменную в исходном файле и объявить (с помощью extern
) в файле заголовка.
extern
означает «этот объект где-то существует», и пока это так, все в порядке. Но заголовок, содержащий определения переменных, считается поврежденным, потому что простое включение его в два отдельных TU нарушит ODR.