Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чем плохи глобальные переменные? Философский вопрос 
V
    Опции темы
mrbrooks
Дата 9.10.2007, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Комрады.
Наболело. Объясните чем плохи глобальные переменные. Уже сколько раз встречал - глобальная переменная это плохо. Пространство имен и все такое. А вот что бы научно - доходчиво - сразу молчок. Вотя я новичок. Глобальными стараюсь не пользоваться - ибо это ПЛОХО - но вот почему? Ведь с другой стороны это удобно.
PM MAIL   Вверх
MAKCim
Дата 9.10.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



mrbrooks
ничего плохого в использовании глобальных переменных нет
долой предрассудки
надо просто все делать с умом и четко понимать конечную цель
бывают случаи, когда без глобальных переменных не обойтись
та же переменная errno глобальна
я уж не говорю о стандартных stdin, stdout, stderr
в многопоточном программировании глобальные переменные + средства синхронизации используются на ура
если надо выделить статически большой кусок данных, то BSS + глобальный массив - лучшее и самое производительное решение


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Daevaorn
Дата 9.10.2007, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(mrbrooks @  9.10.2007,  09:51 Найти цитируемый пост)
Объясните чем плохи глобальные переменные.

1. Невозможно контролировать время жизни, что ещё более страшно и предугадать время создания/удаления тоже нельзя.
2. Пораждают негибкую архитектуру
PM MAIL WWW   Вверх
Anikmar
Дата 9.10.2007, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Ну прям из серии плох ли goto.
На мой взгляд ни одна серьезная программа без глобальных переменных просто не обойдется. Все должно контролироваться здравым смыслом.
Глобальные переменные были есть и будут. Начиная от операционной системы.
PM MAIL ICQ   Вверх
mrbrooks
Дата 9.10.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



А ну и славно. Я то уж было испужался - а оказывается не все так и плохо. После заявлений таких метров можно тему и прикрыть. 

ЗЫ. а goto хорош но в меру на мой начинающий взгляд.
PM MAIL   Вверх
Fazil6
Дата 9.10.2007, 09:14 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(MAKCim @  9.10.2007,  08:59 Найти цитируемый пост)
mrbrooks, ничего плохого в использовании глобальных переменных нетдолой предрассудки

так уж ничего...
Переменных должно быть как можно меньше, а время их жизни как можно короче.
Например, порядок инициализации глобальных и статических переменныз из разных модулей неопределен.
Глобальные данные усложняют программу. Зачастую очень трудно вносить изменения в проект, если это касается работы с глобальными данными.
Другое дело , что не всегда возможно или не всегда просто обойтись без них.
PM MAIL   Вверх
mrbrooks
Дата 9.10.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Я убедился в одном - все можно - но в меру. Эврика!!! Но тем не менее я удовлетворен полученными мнениями. Что бы я без вас делал - наверно считал бы на калькуляторе!!!
PM MAIL   Вверх
MAKCim
Дата 9.10.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Fazil6
заметь, я не призывал использовать глобальные данные
я лишь сказал, что ничего плохого в них нет, если использовать их по делу и с умом
и привел примеры, где без них никак (или почти никак)
Цитата(Fazil6 @  9.10.2007,  09:14 Найти цитируемый пост)
Например, порядок инициализации глобальных и статических переменныз из разных модулей неопределен.

не определен, но при передаче управления в main()
они уже инициализированы (до main выполняется куча кода по инициализации, секции .init, .text (до main))

Добавлено @ 09:25
Цитата(Fazil6 @  9.10.2007,  09:14 Найти цитируемый пост)
Переменных должно быть как можно меньше, а время их жизни как можно короче.

ну что за обобщение?
кто такое сказал? не все в нашей жизни ООП
для каждой задачи свое решение и не всегда количество переменных со временем их жизни связано приведенным тобой соотношением

Добавлено через 8 минут и 9 секунд
вот пример
Код

class foo {
public:
    foo() { throw exception(); }
};

foo object;

int main() {
    cout << Hello, World! << endl;
    return 0;
}

до main() тут дело даже не дойдет и нам здесь абсолютно побоку, порядок инициализации и прочие вещи
а вот если мы попадаем в main(), это гарантирует, что инициализация всех глобальных бъектов прошла успешно

Это сообщение отредактировал(а) MAKCim - 9.10.2007, 09:26


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alek86
Дата 9.10.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



MAKCim, имелась в виду проблема порядка ИХ инициализации. При создании глобального объекта A я не могу быть уверен, что глобальный объект B, который у меня в A используется, уже создан.

та проблема, которая описана у Майерса и решалась паттерном Синглтон (довольное неожиданное применения паттерна, кстати smile )

Это сообщение отредактировал(а) Alek86 - 9.10.2007, 09:39


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 9.10.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Самоя большая проблема с глобальными переменными, при неправильном использовании, это то что неизвестно какое они имеют состояние

Код

size_t size;
Foo foo;

void f1()
{
 size = 100;
 foo = new Foo[size];
}
//ф-я требует для правильной работы чтобы перем. size содержала размер массива, те. чтобы перед вызовом f2 была вызвана f1
void f2()
{
 for (int i =0; i < size; ++i) foo[i]->....
}


я однажды видел проект, в котором использовалось полсотни глобальных переменных вот в таком вот духе. Стоило поменять код в одном месте, начинало глючить в другом. Короче так глобальными переменными лучше не пользоваться.
Помимо этого в многопоточных программах, глобальные переменные еще нужно синхронизировать(если это не int smile).
Если пишешь объектно ориентированную программу, то там у тебя будет минимум глобальных переменных, в случае если дизайн правильный. Ведь объекты должны обмениваться сообщениями, а не передавать информацию друг другу через глобальные переменные.


Это сообщение отредактировал(а) Lazin - 9.10.2007, 10:06
PM MAIL Skype GTalk   Вверх
Mihhail
Дата 9.10.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: нет
Всего: 9



  Глобальными обычно назначаются переменные связанные с единственным параметром или свойством.

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

PM MAIL WWW   Вверх
maxim1000
Дата 9.10.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



есть некоторые аспекты, связанные с восприятием кода
рассмотрим такую ситуацию
Код

x=f(y);

в этой строке есть три объекта: x,f,y
здесь мы точно видим: изменяется x, y (если передан по неконстантной ссылке) и f (если это, например, объект с переопределённым operator() )

если эта функция изменяет глобальную переменную z, получается, что мы этого не видим
нам нужно смотреть её код
даже если функция f только читает содержимое z, всё равно в разных местах программы f(y) может возвращать разные значения для одного и того же y (т.к. она ещё и зависит от значения z)

всё это не делает невозможным понимание кода, такие ситуации делают его просто немного труднее

Добавлено через 2 минуты и 16 секунд
или даже рассмотрим другую ситуацию:
мы ловим баг, связанный с тем, что у переменной z устанавливается неправильное значение
если она глобальная, это значение, в общем-то может установить любая функция
так что сужая область видимости переменной мы сужаем область, которую нам придётся исследовать при ловле багов


--------------------
qqq
PM WWW   Вверх
mrbrooks
Дата 9.10.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Народ. Блин я думал я знал С++ хоть чуть чуть. Но после ваших высказываний - я понял - учиться мне еще учиться и еще раз учиться.

ЗЫ. И в догонку еще раз учиться.
PM MAIL   Вверх
maxim1000
Дата 9.10.2007, 12:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



есть даже более сильные рекомендации (которым лично я зачастую следую)
[похоже, они пришли из области функционального программирования]
строка x=f(y) должна менять только x, т.е. избегать передачи параметров по неконстантной ссылке
это опять же позволяет сразу отсеять кучу мест, где может меняться "y", уже на этапе простого визуального "пробега" по коду (а именно - те, в которых "y" не стоит слева от знака равенства)


--------------------
qqq
PM WWW   Вверх
Alexeis
Дата 9.10.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
maxim1000
Дата 9.10.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



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


--------------------
qqq
PM WWW   Вверх
Alexeis
Дата 9.10.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



  Я стараюсь строить программу в виде восходящего дерева/деревьев. Т.е. в глобальной области один или несколько стволов, все остальное дочерние элементы. Так принято у борланда в VCL. Неплохая модель.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
maxim1000
Дата 9.10.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата(Alexeis @  9.10.2007,  12:24 Найти цитируемый пост)
И еще это засорение пространства имен. Я люблю когда все схожее называется одинаково. Глобальная область видимости мне не дает такой свободы, ведь каждый раз нужно придумывать всякие префиксы к именам, уж лучше написать класс / структуру

а кто мешает объявить глобальную переменную в соответствующем пространстве имён? (которые и были придуманы в частности для того, чтобы формализовать и развить всякие префиксы, которые люди придумывали для отражения области задач объектов)

кроме того, глобальность и компоновка данных в структуры - в некотором смысле почти независимые понятия

и со стековыми объектами можно встретить такое:
Код

{
    int *array;
    int arraySize;
    ...
}

от того, что они стали локальными проблема с тем, что на них всегда надо смотреть в паре, никуда не пропала

с другой стороны те же структуры тоже могут быть глобальными...


--------------------
qqq
PM WWW   Вверх
Alexeis
Дата 9.10.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(maxim1000 @  9.10.2007,  12:32 Найти цитируемый пост)
а кто мешает объявить глобальную переменную в соответствующем пространстве имён? (которые и были придуманы в частности для того, чтобы формализовать и развить всякие префиксы, которые люди придумывали для отражения области задач объектов)

  Правильно. Но если рассуждать чисто логически, то переменная в пространстве имен уже не глобальная, она уже принадлежит определенной группе и доступ к ней уже не прямой. В этом смысле я слабо понимаю чем это лучше создания класса, ведь класс позволяет точно также спрятать переменную под крыло своего пространства имен.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
maxim1000
Дата 9.10.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата(Alexeis @  9.10.2007,  12:42 Найти цитируемый пост)
Правильно. Но если рассуждать чисто логически, то переменная в пространстве имен уже не глобальная, она уже принадлежит определенной группе и доступ к ней уже не прямой.

суть в том, что он - открытый всем
именно это я подразумевал под глобальностью
пространства имён всего лишь организуют, но не контролируют доступ

Цитата(Alexeis @  9.10.2007,  12:42 Найти цитируемый пост)
В этом смысле я слабо понимаю чем это лучше создания класса, ведь класс позволяет точно также спрятать переменную под крыло своего пространства имен.

ну а для класса там уже всё по-другому
для доступа к переменной тогда нужен объект, который её содержит, значит, его нужно передать функции, а значит, он будет упомянут в строке
(ну если, конечно, сам объект объявлен глобально, то снова появляется глобальная переменная, просто другого типа)


--------------------
qqq
PM WWW   Вверх
SergeCpp
Дата 9.10.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Цитата(mrbrooks @  9.10.2007,  14:18 Найти цитируемый пост)
...учиться мне еще учиться и еще раз учиться...

Вот эта книжка поможет весьма (дороговата, но купите бумажную!)

Добавлено через 3 минуты и 49 секунд
Цитата(Alexeis @  9.10.2007,  14:24 Найти цитируемый пост)
И еще это засорение пространства имен. Я люблю когда все схожее называется одинаково. Глобальная область видимости мне не дает такой свободы, ведь каждый раз нужно придумывать всякие префиксы к именам, уж лучше написать класс / структуру. 

Я, к примеру, для этого использую namespace (с глобальными (уже не совсем и глобальными, выходит) inside)

PM MAIL WWW ICQ   Вверх
mrbrooks
Дата 9.10.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(Alexeis @ 9.10.2007,  12:24)
И еще это засорение пространства имен. Я люблю когда все схожее называется одинаково. Глобальная область видимости мне не дает такой свободы, ведь каждый раз нужно придумывать всякие префиксы к именам, уж лучше написать класс / структуру.

Значит если я запихаю все свои глобальные данные в некую структуру и буду их там переваривать это есть выход из сложившейся ситуации. И уже по мере надобности я буду обращаться к ее элементам. Я правильно понял?
PM MAIL   Вверх
maxim1000
Дата 9.10.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата(mrbrooks @  9.10.2007,  13:20 Найти цитируемый пост)
Значит если я запихаю все свои глобальные данные в некую структуру и буду их там переваривать это есть выход из сложившейся ситуации.

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


--------------------
qqq
PM WWW   Вверх
comcon1
Дата 9.10.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Цитата(mrbrooks @  9.10.2007,  13:20 Найти цитируемый пост)
Значит если я запихаю все свои глобальные данные в некую структуру и буду их там переваривать это есть выход из сложившейся ситуации.

Мда. а что, сбор в структуру как-то ограничит доступ к ним??? 

чтобы ограничить доступ, можно собирать их в приват отдельного объекта-синглетона и открывать доступ, например, только определенным классам. хотя какими способами наиболее корректно реализовать последнее... smile  даже и не знаю((



--------------------
PM MAIL   Вверх
Alexeis
Дата 9.10.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(comcon1 @  9.10.2007,  15:47 Найти цитируемый пост)
Мда. а что, сбор в структуру как-то ограничит доступ к ним??? 

  Конечно, для доступа нужно обращаться уже через точку/стрелочку, а не просто по имени.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Dronchik
Дата 9.10.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 0
Всего: 37



Цитата(comcon1 @ 9.10.2007,  15:47)
Цитата(mrbrooks @  9.10.2007,  13:20 Найти цитируемый пост)
Значит если я запихаю все свои глобальные данные в некую структуру и буду их там переваривать это есть выход из сложившейся ситуации.

Мда. а что, сбор в структуру как-то ограничит доступ к ним??? 

чтобы ограничить доступ, можно собирать их в приват отдельного объекта-синглетона и открывать доступ, например, только определенным классам. хотя какими способами наиболее корректно реализовать последнее... smile  даже и не знаю((

Тогда уж лучше protected и делать друзей класса.

Это сообщение отредактировал(а) Dronchik - 9.10.2007, 17:08


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
archimed7592
Дата 9.10.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



А считает ли кто-нибудь плохой такую вот глобальную "переменную":
Код
std::ostream &logStream()
{
#ifdef LOG_TO_CONSOLE
    return std::clog;
#else
    static std::ofstream logFile("my.log");

    return logFile;
#endif
}

#define log logStream()

void someFunc()
{
    // ...

    log << 1 << 2 << 3;
}


Это сообщение отредактировал(а) archimed7592 - 9.10.2007, 18:29


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
maxim1000
Дата 9.10.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



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

logStream()<<"qqq";



--------------------
qqq
PM WWW   Вверх
archimed7592
Дата 9.10.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(maxim1000 @  9.10.2007,  18:31 Найти цитируемый пост)
и не дай бог кому-то захотеть посчитать логарифм smile

Ну это наглядности ради smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
maxim1000
Дата 9.10.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



проблема препроцессора в его незнании о том, что такое C++ smile
(в частности пространства имён и классы)
какое бы осмысленное имя не дать этому define'у, найдётся программист, которому захочется так назвать метод своего класса, и если повезёт, всё закончится ошибкой компилятора...

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


--------------------
qqq
PM WWW   Вверх
comcon1
Дата 10.10.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Цитата(Dronchik @  9.10.2007,  17:07 Найти цитируемый пост)
Тогда уж лучше protected и делать друзей класса.

Я б напиписал friend, если бы примерно год назад на форуме с такой же жестокостью не обсуждалась проблема "Чем плохи дружественные классы".


--------------------
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1978 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.