Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Глобальные переменные

Автор RawonaM, марта 1, 2011, 15:07

0 Пользователи и 1 гость просматривают эту тему.

Python

Цитата: RawonaM от марта  1, 2011, 18:00
Цитата: myst от марта  1, 2011, 17:58
Как он, по-твоему, выберет правильную связь в этой ситуации?
А ее нет, какая там связь? Это разные переменные, просто имя совпало.
Чтобы была одна, нужна extern декларация во всех, кроме одного, где определение.
Но если в одна и та же переменная или функция объявлена как глобальная в двух модулях и как extern — в третьем, то третий модуль может связаться с любым из первых двух.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

RawonaM

Цитата: Python от марта  1, 2011, 18:12
Цитата: RawonaM от марта  1, 2011, 18:00
Цитата: myst от марта  1, 2011, 17:58
Как он, по-твоему, выберет правильную связь в этой ситуации?
А ее нет, какая там связь? Это разные переменные, просто имя совпало.
Чтобы была одна, нужна extern декларация во всех, кроме одного, где определение.
Но если в одна и та же переменная или функция объявлена как глобальная в двух модулях и как extern — в третьем, то третий модуль может связаться с любым из первых двух.
А-а, ну если так то да. Действительно.

myst

Цитата: RawonaM от марта  1, 2011, 18:00
Цитата: myst от марта  1, 2011, 17:58
Как он, по-твоему, выберет правильную связь в этой ситуации?
А ее нет, какая там связь? Это разные переменные, просто имя совпало.
Чтобы была одна, нужна extern декларация во всех, кроме одного, где определение.
Ты вообще представляешь, как линкёр работает?

myst

Цитата: Python от марта  1, 2011, 18:01
Принято считать, что через несанкционированный/ошибочный доступ к переменным можно нанести больше вреда, чем через вызов функций, которые, в идеале, должны содержать в себе определенную защиту от дурака.
КО одобряет, но я так и не понял, зачем мне об этом рассказывать. :donno:

RawonaM

Цитата: myst от марта  1, 2011, 18:20
Цитата: RawonaM от марта  1, 2011, 18:00
Цитата: myst от марта  1, 2011, 17:58
Как он, по-твоему, выберет правильную связь в этой ситуации?
А ее нет, какая там связь? Это разные переменные, просто имя совпало.
Чтобы была одна, нужна extern декларация во всех, кроме одного, где определение.
Ты вообще представляешь, как линкёр работает?
А почему бы мне не представлять? Я тут компилятор написал, еще б чуть-чуть и линкер уже б был :)
Мой линкер разрешает одинаковые имена в разных модулях. Чтобы переменная была доступна в другом модуле, у меня она должна быть объявлена как типа публик, а в другом модуле как екстерн, а совпадение идентификаторов в других случаях никому не мешает.

myst


RawonaM

Без странных вопросов не бывает ни науки ни обучения :)

Python

Offtop
Скоро начнется πυθωνομυστομαχία, или мне можно заниматься своими делами?
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Demetrius

Offtop

Цитата: Python от марта  2, 2011, 02:15
Скоро начнется πυθωνομυστομαχία, или мне можно заниматься своими делами?
μαχία = срач?

myst


amdf

Как обойтись без глобальных переменных? Очень просто. Указатель на область памяти сделать первым параметром всех функций - так при каждом вызове функции явно будет видно, где, собственно, она всё это размещает.
Ведовьство, потвори, чяродеание, волхъвование, зеленничьство, церковнаа татба, мертвеци сволочать, крест посекут, или на стенах трескы емлють из креста.

RawonaM

Цитата: amdf от марта  5, 2011, 10:29
Как обойтись без глобальных переменных? Очень просто. Указатель на область памяти сделать первым параметром всех функций - так при каждом вызове функции явно будет видно, где, собственно, она всё это размещает.
По-моему вы чего-то недопоняли. Это сделать невозможно, а если сильно извратиться, то будет совершенно непонятное спагетти.

Если передавать как первый параметр, а эти функции надо вызывать из других модулей, значит эта переменная будет храниться где-то извне, тогда в модулях извне мы тоже не хотим использовать глобальные переменные, значит в каждую из всех функций во всех модулях, использующих аллокацию памяти, нужно добавлять этот параметр.

myst

В принципе, можно аллокатор с деаллокатором объединить в одну подпрограмму, и указатель на массив указателей спрятать внутри неё. Но это плохой стиль.

RawonaM

Цитата: myst от марта  5, 2011, 10:59
В принципе, можно аллокатор с деаллокатором объединить в одну подпрограмму, и указатель на массив указателей спрятать внутри неё. Но это плохой стиль.
Де це ты подцепил ихсочное слово "подпрограмма"? Корежит.

Конечно, так можно сделать, но это всего лишь пляски которые ничего не меняют, кроме еще большего снижения понимания. Глобальнопеременнофобия ведь связана с тем, что неясно сразу кто как и зачем использует эти переменные. Что в специальной для этого функции, что глобальные, один хрен.

myst

Цитата: RawonaM от марта  5, 2011, 11:22
Де це ты подцепил ихсочное слово "подпрограмма"? Корежит.
Привыкай к правильной терминологии. :)

Цитата: RawonaM от марта  5, 2011, 11:22
Конечно, так можно сделать, но это всего лишь пляски которые ничего не меняют, кроме еще большего снижения понимания. Глобальнопеременнофобия ведь связана с тем, что неясно сразу кто как и зачем использует эти переменные. Что в специальной для этого функции, что глобальные, один хрен.
:??? Ты как будто со мной споришь?

amdf

А ещё все глобальные переменные и функции можно упрятать внутрь класса.
Ведовьство, потвори, чяродеание, волхъвование, зеленничьство, церковнаа татба, мертвеци сволочать, крест посекут, или на стенах трескы емлють из креста.

myst

Цитата: amdf от марта  7, 2011, 20:00
А ещё все глобальные переменные и функции можно упрятать внутрь класса.
Тогда сейчас же отправляйтесь искать классы в C. О результатах непременно расскажите нам.

RawonaM

Да, очень бесит когда С++ называют С. Может amdf с такими переобщался :)

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр