Как объявить глобальную переменную с
Каждая переменная имеет определенную область видимости (scope). Область видимости представляет участок программы, в рамках которого можно использовать переменную.
Переменные бывают глобальными и локальными или автоматическими.
Локальные автоматические переменные
Локальные переменные определяются внутри блока кода (например, внутри функции) и существуют только в рамках этого блока. Эти переменные характеризуются автоматическим временем жизни: при входе в блок для этих переменных выделяется память (которую еще называют автоматическая память), а после завершения работы этого блока, выделенная память освобождается, а объекты удаляются.
Здесь в функции printn определена автоматическая переменная n. В функции main определена автоматическая переменная a. При вне своих функций переменные недоступны. Например, мы не можем использовать переменную n в функции main, так как ее область видимости ограничена функцией printn.
То же самое касается переменных, которые определены во вложенных блоках кода, например, условных конструкциях if..else, switch..case, циклах for,while, do..while. Например:
Здесь переменная n по прежнему является локальной и автоматической. Но она определена не просто в функции, а в блоке кода внутри функции. И вне этого блока кода даже внутри функции ее нельзя использовать, потому что после завершения блока кода она удаляется.
Глобальные переменные
Глобальные переменные определены в файле программы вне любой из функций и могут использоваться любой функцией из этого файла.
Здесь переменная n является глобальной и доступна из любой функции. При этом любая функция может изменить ее значение.
Сокрытие переменных
Автоматические переменные, определенные внутри блока кода, могут скрывать внешние переменные с тем же именем:
Здесь определено три переменных с именем n . Автоматическая переменная n, определенная на уровне функции main ( int n = 10; ) скрывает глобальную переменную n. А переменная n, определенная на уровне блока, скрывает переменную, определенную на уровне функции main.
Статические переменные
Кроме глобальных и автоматических есть особый тип переменных — статические переменные . Они определяются на уровне функций с помощью ключевого слово static . Если автоматические переменные определяются и инициализируются при каждом входе в функцию, то статические переменные инициализируются только один раз, а при последующих вызовах функции используется старое значение статической переменной.
Например, пусть у нас будет функция со стандартной автоматической переменной:
Функция display вызывается три раза, и при каждом вызове программа повторно будет выделять память для переменной i, которая определена в функции. А после завершения работы display, память для переменной i будет освобождаться. Соответственно ее значение при каждом вызове будет неизменно:
Теперь сделаем переменную i статической:
К переменной был добавлено ключевое слово static, поэтому при завершении работы функции display переменная не уничтожается, ее память не очищается, наоборот, она сохраняется в памяти. И соответственно результат работы программы будет иным:
Регистровые переменные
Регистровые переменные фактически являются также автоматическими переменные, но при их определении используется ключевое слово register . Это слово сообщает компилятору, что данная переменная будет интенсивно использоваться в приложении, поэтому ее желательно поместить в регистр процессора, что увеличит быстродействие.
Ключевое слово register применяется к переменным:
И к параметрам функции:
Однако использование слова register еще не является гарантией, что переменная действительно будет помещена в регистр, так как много зависит от аппаратной части компьютера и установленных для нее ограничений. В то же время если аппаратные возможности не поддерживают регистровых переменных, то слово register просто будет игнорироваться, и его использование не вызовет ошибку.
6.4 – Введение в глобальные переменные
В уроке «6.3 – Локальные переменные» мы рассмотрели, что локальные переменные – это переменные, определенные внутри функции (или параметры функции). Локальные переменные имеют область видимости блока (видны только внутри блока, в котором они объявлены) и имеют автоматическую продолжительность (они создаются в точке определения и уничтожаются при выходе из блока).
В C++ переменные также могут быть объявлены вне функции. Такие переменные называются глобальными переменными.
Объявление и именование глобальных переменных
По соглашению глобальные переменные объявляются в верхней части файла, ниже включений заголовочных файлов, но выше любого кода. Ниже показан пример определения глобальной переменной:
Приведенный выше пример напечатает:
По соглашению многие разработчики добавляют к идентификаторам глобальных переменных префикс " g " или " g_ ", чтобы указать, что они глобальные.
Лучшая практика
Рассмотрите возможность использования префикса " g " или " g_ " для глобальных переменных, чтобы помочь отличить их от локальных переменных.
Глобальные переменные имеют область видимости файла и статическую продолжительность
Глобальные переменные имеют область видимости файла (также неофициально называемую глобальной областью видимости или областью видимости глобального пространства имен), что означает, что они видны с момента объявления до конца файла, в котором они объявлены. С момента объявления глобальную переменную можно использовать в любом месте файла! В приведенном выше примере глобальная переменная g_x используется в обеих функциях doSomething() и main() .
Поскольку они определяются вне функции, глобальные переменные считаются частью глобального пространства имен (отсюда и термин «область видимости глобального пространства имен»).
Глобальные переменные создаются при запуске программы и уничтожаются при ее завершении. Это называется статической продолжительностью. Переменные со статической продолжительностью иногда называют статическими переменными.
В отличие от локальных переменных, которые по умолчанию не инициализируются, статические переменные по умолчанию инициализируются нулем.
Инициализация глобальной переменной
При желании неконстантные глобальные переменные можно инициализировать:
Константные глобальные переменные
Как и локальные переменные, глобальные переменные могут быть константными. Как и все константы, константные глобальные переменные должны быть инициализированы.
Связанный контент
Предупреждение о (неконстантных) глобальных переменных
У начинающих программистов часто возникает соблазн использовать множество глобальных переменных, потому что их можно использовать без явной передачи их каждой функции, которая в них нуждается. Однако следует вообще избегать использования неконстантных глобальных переменных! А почему, мы обсудим в следующем уроке «6.9 – Почему глобальные переменные – это зло».
Как объявить глобальную переменную в c#?
Когда создаю переменную auto не могу ее использовать. Подскажите, что нужно исправить.
Основная ошибка — если начали использовать объекты, то откажитесь от идеи использовать статичность и глобальность. Когда разберётесь с объектами, то поймёте где иногда нужна статичность. Так, что убирайте static из ваших классов (как оно вообще скомпилировалось?)
Вторая ошибка — области видимости, у переменных они есть свои у каждой.
У переменной auto область видимости < car95 auto = new car95(mode, 50); >и всё! Не ранее, не позднее к ней не обратиться. Можно 1 , т.к. форма на которой у вас кнопка button1 это тоже объект, завести поле в форме.
Обратите внимание, что для auto я поставил тип car , а не car95 или иной. В этом третья ваша ошибка — нельзя для одной переменной или поля назначить три разных типа. Но если все предполагаемые типы наследуются от одного общего, то можно назначить тип предка.
Ну и нельзя не упомянуть:
Реализация на форме логики, несвязанной с UI (интерфейс пользователя), не рекомендуется. Лучше отделять логику приложения от работы с UI. Хабрахабр. Паттерны для новичков: MVC vs MVP vs MVVM
Хоть это и спорный момент, но всё-таки есть Соглашения о написании кода на C# , которые Ваш код и мои поправки нарушают.
Странно, что у Вас столько int используется. Попробуйте enum Краткий обзор языка C#. Перечисления
Публичные поля тоже не рекомендуется использовать, когда разберётесь используйте публичные свойства вместо них. Для чего нужны свойства?
Урок №49. Глобальные переменные
Мы уже знаем, что переменные, объявленные внутри блока, называются локальными. Они имеют локальную область видимости (используются только внутри блока, в котором объявлены) и автоматическую продолжительность жизни (создаются в точке определения и уничтожаются в конце блока).
Глобальными называются переменные, которые объявлены вне блока. Они имеют статическую продолжительность жизни, т.е. создаются при запуске программы и уничтожаются при её завершении. Глобальные переменные имеют глобальную область видимости (или «файловую область видимости»), т.е. их можно использовать в любом месте файла, после их объявления.
Определение глобальных переменных
Обычно глобальные переменные объявляют в верхней части кода, ниже директив #include, но выше любого другого кода. Например:
Подобно тому, как переменные во внутреннем блоке скрывают переменные с теми же именами во внешнем блоке, локальные переменные скрывают глобальные переменные с одинаковыми именами внутри блока, в котором они определены. Однако с помощью оператора разрешения области видимости ( :: ), компилятору можно сообщить, какую версию переменной вы хотите использовать: глобальную или локальную. Например:
Результат выполнения программы:
Global value: 3
Local value: 9
Использовать одинаковые имена для локальных и глобальных переменных — это прямой путь к проблемам и ошибкам, поэтому подобное делать не рекомендуется. Многие разработчики добавляют к глобальным переменным префикс g_ («g» от англ. «global»). Таким образом, можно убить сразу двух зайцев: определить глобальные переменные и избежать конфликтов имен с локальными переменными.
Ключевые слова static и extern
В дополнение к области видимости и продолжительности жизни, переменные имеют еще одно свойство — связь. Связь переменной определяет, относятся ли несколько упоминаний одного идентификатора к одной и той же переменной или нет.
Переменная без связей — это переменная с локальной областью видимости, которая относится только к блоку, в котором она определена. Это обычные локальные переменные. Две переменные с одинаковыми именами, но определенные в разных функциях, не имеют никакой связи — каждая из них считается независимой единицей.
Переменная, имеющая внутренние связи, называется внутренней переменной (или «статической переменной»). Она может использоваться в любом месте файла, в котором определена, но не относится к чему-либо вне этого файла.
Переменная, имеющая внешние связи, называется внешней переменной. Она может использоваться как в файле, в котором определена, так и в других файлах.
Если вы хотите сделать глобальную переменную внутренней (которую можно использовать только внутри одного файла) — используйте ключевое слово static: