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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использовать ли глобальные переменные? целесообразность использования гл. п. 
V
    Опции темы
Lazin
Дата 16.4.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(azesmcar @  16.4.2009,  09:01 Найти цитируемый пост)
ничего злее не видел..срочно удалить

ну, данный код создает 39 специализаций шаблона, вида:

Код

template<class T0, class T1>
struct tuple<T0, T1, none, none...., none>//40 параметров
{
    typedef TypeList<T0, TypeList<T1, none> > type;
};


предлагаешь ручками написать smile 
upd.
если что, я это не писал, а из одного своего проекта скопипастил и немного изменил smile 

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


uploading...
****


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

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



Цитата

зачем городить такой убогий код? typedef'ы нынче не в моде? 

Андрей Александреску когда писал библиотеку Loki видимо не успел изучить typedef. И я тоже видимо не очень хорошо его представляю..не покажете как заменить?

Добавлено через 1 минуту
Цитата

предлагаешь ручками написать 

да шучу я smile спокойствие только спокойствие
PM   Вверх
Rickert
Дата 16.4.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



Приводить аргументы типа #define size(x) rand() - глупо. Ну и что это такое? Ну define, ну западло и чего дальше-то? Кому это надо такое делать? Уходящему программисту, которому недовыплатили пособие? Так он и без того нагадит smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 16.4.2009, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 1
Всего: 56



с произвольными типами никак, а вот с конкретными легко.

Это сообщение отредактировал(а) vinter - 16.4.2009, 09:18


--------------------
Мой блог
PM MAIL WWW   Вверх
GoldFinch
Дата 16.4.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(vinter @  16.4.2009,  10:05 Найти цитируемый пост)
с его помощью еще определяются убогие куски кода, которые нельзя трассировать в дебаге. 

меняйте отладчик, нормальные отладчики трассируют всё
PM MAIL ICQ   Вверх
azesmcar
Дата 16.4.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата

с произвольными типами никак, а вот с конкретными легко.

Так я тоже об этом. Это библиотека, а вот пользователь библиотеки может сделать typedef на конкретные типы и забыть о макросах.
Я только хотел заметить что не все так однозначно. Макросы используются в СТЛ, в БУСТ, в ЛОКИ и во многих других библиотеках написанных серьезными людьми, которые кстати сами советуют избегать макросов. Но это не всегда удается.
PM   Вверх
vinter
Дата 16.4.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 1
Всего: 56



Цитата(GoldFinch @  16.4.2009,  10:25 Найти цитируемый пост)
меняйте отладчик, нормальные отладчики трассируют всё

не, спасибо, мне в студии удобно и хорошо. Из за макросов менять не собираюсь, я лучше их использовать не буду.



--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 16.4.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(vinter @  16.4.2009,  09:05 Найти цитируемый пост)
Который, между прочим, заменяется inline функциями

inline не всегда inline  smile 

Цитата(vinter @  16.4.2009,  09:05 Найти цитируемый пост)
ага, с его помощью еще определяются убогие куски кода

мысли шире

Код

#define cat(a, b) a##b

Код

#define str(a) #a

и вариации

Цитата(vinter @  16.4.2009,  09:05 Найти цитируемый пост)
глобальные переменные источник потенциальных ошибок

потенциальные ошибки есть всегда

Цитата(vinter @  16.4.2009,  09:05 Найти цитируемый пост)
И лучше взять за правило их не использовать

лучше взять за правило думать прежде чем использовать

Цитата(vinter @  16.4.2009,  09:05 Найти цитируемый пост)
Кроме того, ГП прививают ненужные зависимости программам

static/анонимный namespace отменили?
весь linux построен по принципу 
модуль = *.c файл : {static ГП, static функции, глобальные функции, экспортируемые функции}



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

PM MAIL   Вверх
Любитель
Дата 16.4.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



MAKCim, C есть С - там свои особенности smile Против них вряд ли кто-то спорить пытается (я надеюсь). Но речь ведь (в первую очередь) про С++? ;)


--------------------
PM MAIL ICQ Skype   Вверх
azesmcar
Дата 16.4.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Любитель
Ну, макросы необходимы и в С и в С++. Есть по крайней мере 3 (сейчас больше не припоминаю) вещи которые невозможно написать без макросов.
1.
Код

#ifndef HEADER_H
#define HEADER_H
...
#endif

2.
Код

#ifdef DEBUG
#define ASSERT(T) ...
#else
#define ASSERT(T)
#endif

3.
Код

#ifdef WIN32 //windows
create_thread(...)
#else //*nix
pthread_create(...)
#endif

навскидку пока эти 3

Добавлено через 59 секунд
в остальном макросы могут облегчить написание кода, т.е. генерировать то, что надо писать вручную. А тут уже программисту решать, надо или не надо. Зависит от ситуации.
PM   Вверх
vinter
Дата 16.4.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 1
Всего: 56



azesmcar, я про макросы говорил, а не препроцессор. Препроцессор, бесспорно, вещь нужная.

Цитата(MAKCim @  16.4.2009,  12:04 Найти цитируемый пост)
inline не всегда inline  

и все же, в большинстве случаев можно утверждать, что будет inline на конкретном компиляторе. Лично мне, этого достаточно.

Цитата(MAKCim @  16.4.2009,  12:04 Найти цитируемый пост)
static/анонимный namespace отменили?

это не глобальные переменные, они глобальны в рамках юнита, а не проекта, разговор не о них(хотя эти тоже лишнее).

Цитата(MAKCim @  16.4.2009,  12:04 Найти цитируемый пост)
весь linux построен по принципу модуль = *.c файл : {static ГП, static функции, глобальные функции, экспортируемые функции}

linux не показатель. Его основа писалась очень давно, времена меняются. Принципы программирования тоже. 


--------------------
Мой блог
PM MAIL WWW   Вверх
azesmcar
Дата 16.4.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата

azesmcar, я про макросы говорил, а не препроцессор. Препроцессор, бесспорно, вещь нужная.


Так ведь ASSERT - макрос..и TYPELIST тоже. Речь не о том что надо макросы писать - хорошо и безусловно перед тем как написать макрос стоит хорошенько подумать над другими возможными решениями. Я просто хочу сказать что не стоит так однозначно ставить крест на макросах, иногда без них не обойтись (говоря не обойтись я не имею ввиду что по другому невозможно написать, я имею ввиду что просто другой способ - хуже).

PM   Вверх
vinter
Дата 16.4.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 1
Всего: 56



azesmcar, ассерт можно на ф-ию заменить, с typelist сложнее, то тоже, я думаю, можно выкрутиться


--------------------
Мой блог
PM MAIL WWW   Вверх
azesmcar
Дата 16.4.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата

ассерт можно на ф-ию заменить

можно, но тогда надо будет вручную передавать функции все параметры
и получится вместо
Код

assert( ptr != 0 );

Код

assert(ptr != 0, __FILE__, __LINE__, __FUNCSIG__); //etc...


я уже не говорю о том что #CONDITION в функцию без макросов не передать. Т.е. чтобы асерт выдавал текст проверки.
(типа: assertion failed when checking condition "ptr != 0" in file program.cpp, on line 666, in function myfirstprogram::myfirstfunction)
хотя как я уже написал
Цитата

я не имею ввиду что по другому невозможно написать, я имею ввиду что просто другой способ - хуже



Это сообщение отредактировал(а) azesmcar - 16.4.2009, 13:47
PM   Вверх
Lazin
Дата 16.4.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(vinter @  16.4.2009,  09:36 Найти цитируемый пост)
я лучше их использовать не буду

за сколько часов напишешь без макросов мой пример с предыдущей страницы? smile 
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




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


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

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