Объявлять переменную внутри main или вне
В чем разница между этими двумя вариантами? Только область видимости или есть ещё какие-то подводные? Есть ли различия между этими вариантами в плане памяти? И заодно - насколько глобальными будут переменные объявленные вне main - в рамках одного файла или всех?
Понимаю, что вопрос очень банальный, но очень уж лень читать уже в миллионный раз про переменные в разных языках.
int main() {
int foo;
}
int foo;
int main() {
}
Ответы (2 шт):
Могу быть неточным, но отвечу.
Разница только в области видимости переменной.
Насколько мне известно, в плане памяти разницы нет в том плане, что и там и там переменная, но есть разница в том, что одна будет жить вечно - это не ссылка и не указатель, а статическая память.
Видна глобальная переменная будет там, где ты включишь свой файл с исходником. #include "main.h"
Тоже отвечу.
В C и C++ если переменная объявляется в теле функции, то она размещается в стеке, во фрейме данной функции. Это так назывемая локальная переменная. Т.к. фрейм создаётся в момент вызова функции и уничтожается в момент возврата из неё (со всеми локальными переменными и переменными-параметрами функции), то речь идёт не только об области видимости, но и о времени жизни локальной переменной. Локальная переменная существует, пока выполняется функция. Также локальная переменная не может быть импортирована/экспортирована.
Если переменная объявляется вне тела любой из функций, то она размещается в секции данных приложения или динамической библиотеки (в зависимости от того, что компилируется). Это - глобальная переменная. Она создаётся, когда загружается приложение или библиотека и существует до тех пор, пока приложение не завершится, или динамическая библиотека не будет выгружена. Глобальная переменная доступна для обращения из разных функций, а также может быть импортирована из другого модуля или экспортирована для других модулей.