![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Vyacheslav |
|
||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
[
Если очень хочется. можно использовать локальные классы-функтуаторы.
Макросы не являются принадлежностью ООП, являются наследием С и чрезмерное их использование - плохой стиль.
Как правило, это решается в конкретных компиляторах Например, в С++Builder имеются подобные макросы:__FILE__, __FUNC__, __LINE__, __DATE__
Зачем?
-------------------- С уважением, Вячеслав Ермолаев |
||||||||||||
|
|||||||||||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
2 Fantasist
О да, от Паскаля оно не отличается - подобная функциональность отсутствует и в нем и в CPP. А значения с плавающей точкой сравнивать все - таки можно - если осторожно ![]() void f1 (double Value) { if (Value == 1) do_something(1); else if (Value == double(1.5)) do_something(2); else do_something(3); } ....... f1(1); f1(1.5); f1(2); будет работать всегда. Что касается сравнения строк (и других типов данных), необязательно делать его "побайтно". Бинарный поиск в отсортированной таблице - весьма эффективен. Кстати, насчет таблиц. Реально, многие (извиняюсь, некоторые, два из двух) компиляторы, проверенные мною на этот предмет, реализуют switch с небольшим числом вариантов как последовательность проверок по типу if. И ваще, язык высокого уровня - на то и служит, чтобы не грузить программиста подобной рутиной. ;) 2 Vyacheslav Спасибо насчет информации о __FUNC__ . Что же касается кода switch (i) { case 1: case 2: case 3: ... break; case 4: ... } - оно понятно; а если поддиапазон 1..100 ? Насчет локальных классов - тоже понятно, но как-то оно через ж... Да и были проблемы с этим - уже не упомню, какие. А препроцессор и макросы - вещь хорошая (IMHO), если пользоваться ею умеренно. И вместно. Хоть даже и не согласуются они с парадигмой ООП. Когда оптимизируешь по скорости критические участки кода - бывает, уже и не до ООП. Структурность же при (разумном) использовании макросов сохраняется. Шаблоны (template) в подобных случаях не всегда применимы. Кстати, хотелось бы еще иметь возможность пошаговой отладки тела макросов (как функций). Впрочем, это пожелание - не в отношении стандарта языка, а по поводу конкретных реализаций сред программирования. Это сообщение отредактировал(а) Crait - 29.9.2003, 18:55 |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Так и знал, что кто-нибудь предложит. Забыл в своём топике написать. Исключения - это и есть исключения. Смысл их в том, при нормальной работе ни одно исключение вызываться не должно. А вариант Vyacheslav'а - это скажем так, маленькая хитрость. Я против такого применения. Тем более, что некоторые среды будут останавливать выполнение программы с сообщением о произошедшей исключительной ситуации. Но я тут о другом подумал. Тут говорили, что нельзя вводить возможность выхода из вложенных блоков. А try ввели в стандарт и ничего. Все понимают и легко читают. Я считаю, что goto плохо применять, потому как не известно куда он выбросит. А break выходит за пределы блока. |
|||
|
||||
Vyacheslav |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Crait
Настоятельно делать этого не рекомендую ![]()
-------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
Эт понятна. Я ж говорю - если осторожно ;)
Это сообщение отредактировал(а) Crait - 29.9.2003, 18:52 |
|||
|
||||
Fantasist |
|
||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Ага, пока кто-нибудь не вызовет эту функцию со значением полученным кодом типа приведенного Vyacheslav'ом.
Обязательно. Бинарный поиск, хеш-таблицы - это методика храниния и поиска данных, и там действительно не всегда приходиться сравнивать строки, но сравниваются они только побайтно. Да и в любом случае процесс длительный. Хотя, конечно, switch выглядит более удобочитаемо, чем куча if... else'ов. С этим согласен. -------------------- Волны гасят ветер... |
||||
|
|||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Кому не нравится Си - пусть говорит об этом на сишных конференциях высшего уровня. Там многоопытные специалисты примут или не примут предложения.
Есть еще вариант: написать свой собственный компилятор и играть с ним, сколько душе угодно. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
Спасибо, Peter, за ценные советы.
|
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Модератор: Я понимаю, что тема располагает к флейму. Но последнии два топика - это уже слишком. Прошу не продолжать в этом направлении. Всё равно буду удалять.
|
|||
|
||||
Yujen |
|
|||
Unregistered |
А ты не слышал такую поговорку: "Плохому танцору всегда ЯЙЦА МЕНШАЮТ"
![]() Я вот например DELPHI видел всего два раза в жизни, и не понял как там и что там, хотя в Turbo Pascal'е писал когдато (в древние времена, в эпожу MS-DOS), и что я по твоему должен на каждом углу орать, что DELPHI это [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] отстой Borland MUST DIE MSVISUAL C++ FOR EVA. Нет парень ты в себе разберись, а потом уже что-либо охаивай, напиши для начала какой-нибуть простенький интерпретатор, дай людям поюзать, вот тогда и только тогда ты поймешь, что это такое: писать... А обделать можно все, что угодно. Обделать легко, отмыться трудно |
|||
|
||||
setq |
|
|||
Unregistered |
:-)
это в чей адрес, интересно? по поводу... Crait <<setq, твоя третья проблема может быть разрешена так : for (int i=6, j=0, k=666;;)>> ...не получится для for (int i=6, double j=7.7, char *s=0;;) такие дела :-( |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
ГА !!! получится, если делать вот так:
такие дела ![]() ![]() ![]() -------------------- ![]() |
||||
|
|||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
2RAN: по-моему, мое сообщение не было оффтопик. Правда, я вместо того, чтобы поругать язык, высказал свое мнение об участниках форума. Насмотрелся уже на докторов наук, которые ни в зуб ногой даже в "своей" теме.
Учиться надо!!! А на конференциях высокого уровня, я полагаю, не чайники сидят, а многоопытные соображающие мужики. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Vit |
|
||||||||||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Модератор: Кому, что и где говорить указывать не надо. Не маленькие - сами разберёмся! Вас не устраивает наш уровень - пожалуйста, мы никого не держим! Идите на "сишные конференции высшего уровня". Зачем Вы тогда здесь отвечаете? Если Вам не нравится то что здесь говорится - вам надо обратится к модератору, и он уберёт замечания не соответствующие правилам форума, а Вам никто права распоряжаться на форуме хозяйской рукой, указывая кому и что говорить, не давал. Не надо подменять администрацию. Кроме того среди тех кто высказывался никто не сказал, что ему не нравится C.
Модератор: Знаете, у нас свои специалисты есть. Реклама других форумов категорически запрещена. Читайте правила. Нам не требуется чтобы кто-то принимал или не принимал наши возражения. Здесь люди обмениваются своим мнением, и для этого не требуется принятие кем либо каких-то предложений. Вы нас наверное с какой-то другой организацией спутали!
Модератор: Вы сделали 3 ошибки! 1) Язык C/C++ никто не ругал. Были высказаны мнения по поводу того, что в этом языке кому-то не удобно, или что бы он хотел иметь. Замете, ни один из участников дисскуссии не ругал язык. Указывали на недостатки - да, сравнивали с другими языками - да, ругать - нет! Впрочем тема, бала несколько одиозно озаглавлена - это исправлено, но к чести участников форума - никто до ругани в адрес C не опустился. 2) Высказывать личное мнение об участниках форума категорически запрещено! См. правила форума. 3) Переход с обсуждения темы на обсуждение обсуждающих - есть офтопик. См. правила форума.
Модератор: Это вы о тех аксакалах которые сидят на "на сишных конференциях высшего уровня"? Так мы туда и не ходим! Зачем они нам!
Модератор: Да, причём многим надо учиться языку С++, а участнику под ником "Peter" надо прежде всего учится уважению собеседников, уважению чужого мнения, умению внимательно читать и понимать смысл прочитанного и элементарной вежливости и культуре общения, по-видимому Peter пропустил детский сад и первые 3 класса школы, где учили таким простым вещам...
Модератор: Да пусть сидят где угодно! Модератор: Я снизил репутацию участника Peter, объяснения вы можете найти в таблице рейтингов, а аргументы описаны здесь. Обращаясь к Peter, хочу сказать, что вы умудрились в 2х коротких сообщениях многократно нарушить правила форума, оскорбить участников форума и администрацию форума. Повторные действия в этом направлении могут привести к анулированию Вашей учётной записи и блокирование IP адресов Вашего провайдера для доступа к форуму. Обжаловать мои действия, как и действия модераторов можно в специальном разделе "Обсуждение форума" http://forum.vingrad.ru/index.php?act=SF&f=27. Продолжение этой дисскуссии здесь будет рассматриваться как повторное злостное нарушение правил форума. Причём не важно, кто будет продолжать обсуждение. Здесь обсуждаем - недостатки, недочёты языка C/C++ и то что Вам лично в этом языке не хватает для полного счастья. Меня, модераторов и Peter'а продолжать обсуждать здесь КАТЕГОРИЧЕСКИ ЗАПРЕЩАЕТСЯ! -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
||||||||||||
|
|||||||||||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Модератор:
2 setq - осторожнее в названии темы. Вы всё правильно написали по поводу возможности недостатков языка C, и обсуждение может быть интересным, но заголовок темы таким быть не должен! Заголовок я исправил, не обессудте, надеюсь теперь вопросы по поводу корректности ни у кого не возникнут. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |