Как распространить видимость глобальной переменной на два файла? Может ли в блоке быть объявлена extern-переменная для расширения области видимости глобальной переменной? Можно ли внутри блока изменять значение глобальной переменной? Могут ли имена глобальной переменной и переменной, определенной внутри блока, совпадать? Могут ли несколько файлов иметь глобальную переменную с одинаковым именем?
Как распространить видимость глобальной переменной на два файла?
Нужно поместить объявление переменной со спецификатором extern
в заголовочный файл, и включить этот заголовок в два файла с кодом. При этом определить переменную следуют только в одном файле.
Может ли в блоке быть объявлена extern-переменная для расширения области видимости глобальной переменной?
В C++ вы можете использовать квалифицированное имя переменной, указывая перед именем переменной имя пространства имен, где переменная объявлена. Например, если переменная x
объявлена в глобальном пространстве имен, то для обращения к ней вы можете использовать имя ::x
.
Вы также можете в C и в C++ объявить внешнюю переменную в блоке кода, снабдив объявление спецификатором extern
.
Можно ли внутри блока изменять значение глобальной переменной?
Если переменная не объявлена с c/v квалификатором, то вы можете ее изменять.
Могут ли имена глобальной переменной и переменной, определенной внутри блока, совпадать?
Как уже было упомянуто, в C++ для глобальной переменной вы можете использовать квалифицированное имя, благодаря чему оно будет отличаться от имени локальной переменной. В противном случае имя локальной переменной будет скрывать имя глобальной переменной.
Могут ли несколько файлов иметь глобальную переменную с одинаковым именем?
Если переменная имеет внутреннее связывание, то в каждой единице трансляции эта переменная будет представлять отдельный объект. Если же она имеет внешнее связывание, то все переменные, объявленные с тем же именем и внешним связыванием будут обозначать один и тот же объект.
В заключении пример простой программы, в которой поведение переменных, объявленных со спецификатором extern
, в языках C и C++ совпадают
#include <iostream>
extern int x = 10;
int main()
{
std::cout << "x = " << x << std::endl;
{
int x = 20;
std::cout << "x = " << x << std::endl;
{
extern int x;
x = 30;
std::cout << "x = " << x << std::endl;
}
std::cout << "x = " << x << std::endl;
}
std::cout << "x = " << x << std::endl;
return 0;
}
Вывод программы на консоль
x = 10
x = 20
x = 30
x = 20
x = 30
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо сделать проверку пароля в режиме живого времени по каждому символуТ
Считаю вхождения true в массивПомогите разобраться как сделать проверку на 0, undefined, null