if (false)
От: igna Россия  
Дата: 25.11.09 15:11
Оценка: 6 (3) -1 :))) :)
Еще одно применение if (false):

    if (false)
        ;
#ifdef MACRO
    else if (cond1)
        expr1;
    else if (cond2)
        expr2;
#endif
    else if (cond3)
        expr3;
    else
        expr4;


Без if (false) можно:

#ifdef MACRO
    if (cond1)
        expr1;
    else
    if (cond2)
        expr2;
    else
#endif
    if (cond3)
        expr3;
    else
        expr4;


Но форматировщик VC 9.0 превращает это в следующее:

#ifdef MACRO
    if (cond1)
        expr1;
    else
        if (cond2)
            expr2;
#endif
        else
            if (cond3)
                expr3;
            else
                expr4;
Re: if (false)
От: Sni4ok  
Дата: 25.11.09 15:24
Оценка: +2
Здравствуйте, igna, Вы писали:

I>Еще одно применение if (false):


долго думал, но так и не уловил тайный смысл этого творчества.
Re[2]: if (false)
От: igna Россия  
Дата: 25.11.09 15:35
Оценка: -1 :)
Здравствуйте, Sni4ok, Вы писали:

S>долго думал, но так и не уловил тайный смысл этого творчества.


Значит недостаточно долго. Ну попробуй напиши то же самое без if (false).
Re[3]: if (false)
От: Sni4ok  
Дата: 25.11.09 15:38
Оценка:
Здравствуйте, igna, Вы писали:


I>Значит недостаточно долго. Ну попробуй напиши то же самое без if (false).


#ifdef MACRO
    if (cond1)
        expr1;
    else if (cond2)
        expr2;
    else 
#endif
    if (cond3)
        expr3;
    else
        expr4;
Re[4]: if (false)
От: igna Россия  
Дата: 25.11.09 15:44
Оценка:
Здравствуйте, Sni4ok, Вы писали:

S>#ifdef MACRO
S>    if (cond1)
S>        expr1;
S>    else if (cond2)
S>        expr2;
S>    else 
S>#endif
S>    if (cond3)
S>        expr3;
S>    else
S>        expr4;


Верно, но я пользуюсь форматировщиком VC 9.0, который превращает это в следующее:

#ifdef MACRO
    if (cond1)
        expr1;
    else if (cond2)
        expr2;
    else 
#endif
        if (cond3)
            expr3;
        else
            expr4;
Re: if (false)
От: ole! США http://files.rsdn.org/4543/rsdn.gif
Дата: 25.11.09 15:48
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Еще одно применение if (false):


I>
I>    if (false)
I>        ;
I>#ifdef MACRO
I>    else if (cond1)
I>        expr1;
I>    else if (cond2)
I>        expr2;
I>#endif
I>    else if (cond3)
I>        expr3;
I>    else
I>        expr4;
I>


I>Без if (false) можно:


I>
I>#ifdef MACRO
I>    if (cond1)
I>        expr1;
I>    else
I>    if (cond2)
I>        expr2;
I>    else
I>#endif
I>    if (cond3)
I>        expr3;
I>    else
I>        expr4;
I>


тут не форматировщик VC 9.0 виноват.
каждый раз, когда я вижу на ревью подобный код с лестницей if'ов, да еще и вперемежку с макросами я просто заворачиваю ревью кода.
мой комментарий простой — это место нужно переделать, так как плотное нагромаждение условной логики влечет затем десятки коммитов с фиксами в этом месте, новыми if'ами, функция разрастается, юнит тестированию не поддается...
думаю, понятно
my $.02
Re: if (false)
От: Кодт Россия  
Дата: 25.11.09 15:51
Оценка: 2 (1)
Здравствуйте, igna, Вы писали:

I>Еще одно применение if (false):


Проще говоря, это способ открыть однородный список проверок, наподобие
#define BEGIN_IFS if(false) ;
#define   CASE(condition, action) else if(FOO(condition)) BAR(action);
#define END_IFS   else ;
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[2]: if (false)
От: igna Россия  
Дата: 25.11.09 15:52
Оценка:
Здравствуйте, ole!, Вы писали:

O>мой комментарий простой — это место нужно переделать


Никак объектно-ориентированное программирование советуешь применить?
Re[5]: if (false)
От: Sni4ok  
Дата: 25.11.09 15:53
Оценка: +1 :)
Здравствуйте, igna, Вы писали:

I>Верно, но я пользуюсь форматировщиком VC 9.0, который превращает это в следующее:


я не знаю что такое форматировщик(хотя смутно подозреваю, что вы о редакторе), и vc 9.0 я даже в глаза не видел, мы тут как бы с++ обсуждаем или может давайте о ноутпаде с вордом поговорим?
Re[6]: if (false)
От: igna Россия  
Дата: 25.11.09 15:58
Оценка:
Здравствуйте, Sni4ok, Вы писали:

S>я не знаю что такое форматировщик(хотя смутно подозреваю, что вы о редакторе), и vc 9.0 я даже в глаза не видел, мы тут как бы с++ обсуждаем или может давайте о ноутпаде с вордом поговорим?


Если не знаешь ... трам-та-та-там (здесь)
Re[2]: if (false)
От: TimurSPB Интернет  
Дата: 25.11.09 16:15
Оценка:
O>мой комментарий простой — это место нужно переделать, так как плотное нагромаждение условной логики влечет затем десятки коммитов с фиксами в этом месте, новыми if'ами, функция разрастается, юнит тестированию не поддается...
O>думаю, понятно

А можно подробнее?
Про макросы понятно.
Чем заменяете if'ы?
Make flame.politics Great Again!
Re: if (false)
От: frogkiller Россия  
Дата: 25.11.09 16:21
Оценка: +4 :))
Здравствуйте, igna, Вы писали:

I>Еще одно применение if (false)


...

Дожили... язык программирования в качестве костыля для IDE
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[2]: if (false)
От: Кодт Россия  
Дата: 25.11.09 16:22
Оценка: 1 (1)
Здравствуйте, ole!, Вы писали:

O>каждый раз, когда я вижу на ревью подобный код с лестницей if'ов, да еще и вперемежку с макросами я просто заворачиваю ревью кода.

O>мой комментарий простой — это место нужно переделать, так как плотное нагромаждение условной логики влечет затем десятки коммитов с фиксами в этом месте, новыми if'ами, функция разрастается, юнит тестированию не поддается...

Карты условий (WTL — MSG_MAP, ATL/COM — INTERFACE_MAP) принимаешь или заворачиваешь?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re: if (false)
От: ilvi Россия  
Дата: 25.11.09 16:36
Оценка:
Здравствуйте, igna, Вы писали:

I>Еще одно применение if (false):


Страшно...
Никак нельзя этот каскад if-ов заменить, это же достанется поддерживать такое голову себе поломаешь вглядываесь в это нагромождение.
Ну в это еще может и нормально, но если там еще условий 6 в реальном коде, то меня бы совесть мучила.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[2]: if (false)
От: Alexander G Украина  
Дата: 25.11.09 16:50
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Дожили... язык программирования в качестве костыля для IDE


Бывает. И не только для IDE. Триграфы для доксигена
Автор: Alexander G
Дата: 14.01.09
.
Русский военный корабль идёт ко дну!
Re[3]: if (false)
От: Mephisto666 Великобритания  
Дата: 25.11.09 19:51
Оценка:
Здравствуйте, igna, Вы писали:

I>Значит недостаточно долго. Ну попробуй напиши то же самое без if (false).


Есть удобное решение — не писать так.
Скрывать ошибки проектирования нагромождениями из макросов это стиль раннего Микрософт.
Re[5]: if (false)
От: k55 Ниоткуда  
Дата: 26.11.09 06:31
Оценка:
Здравствуйте, igna, Вы писали:

I>Верно, но я пользуюсь форматировщиком VC 9.0, который превращает это в следующее:

А если вот так:

I>
I>#ifdef MACRO
I>    if (cond1)
I>        expr1;
I>    else if (cond2)
I>        expr2;
I>    else 
I>#endif
      {
I>        if (cond3)
I>            expr3;
I>        else
I>            expr4;
      }
I>
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.
Re: if (false)
От: sokel Россия  
Дата: 26.11.09 08:06
Оценка:
Здравствуйте, igna, Вы писали:

if(...); без выражения ещё бывает полезен в подобных случаях:

namespace LOG
{
    // функция проверки возможности вывода в лог 
    inline bool available(int source, int severity) { ... }
    // функции вывода в лог
    void out(int src, int svr, cont char* fmt, ...);
    void va_out(int src, int svr, cont char* fmt, va_list va);
    // обертка для макроса
    struct proxy
    {
        int src, svr;
        log_proxy(int src, int svr) : src(src), svr(svr) {}
        void out(const char* fmt, ...) { va_list va; va_start(va, fmt); va_out(fmt, va); va_end(va); } // это можно уже и в модуль вынести
    };
}
// для удобства исопльзования заворачиваем логирование в макрос
#define LOG_OUT(SRC,SVR) if(!LOG::available(SRC,SVR)); else LOG::proxy(SRC,SVR).out

// далее в коде:
LOG_OUT(SRC_DBC, SVR_ERROR)("some error: %u", err);
Re: if (false)
От: jazzer Россия Skype: enerjazzer
Дата: 26.11.09 08:21
Оценка: 2 (2)
Здравствуйте, igna, Вы писали:

I>Еще одно применение if (false):


Вроде стандартная техника, известная от сотворения мира...

Аналогичный трюк:
select .... from ...
where 1=1
and ...
and ...
and ...

теперь можно закомментировать каждый 'and' или даже все сразу, и запрос будет работать — очень удобно при отладке запроса
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: if (false)
От: igna Россия  
Дата: 26.11.09 09:16
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Вроде стандартная техника, известная от сотворения мира...


Потому и написал "Еще одно применение". Форматировщик-то тот самый был сотворен позднее чем мир.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.