- 1
- 2
- 3
- 4
- 5
- 6
- 7
//Дефайн в некотором хэдере
#define _TAPI(b) do {BOOL _b = (BOOL)(b); if (!b) throw(system_exception(GetLastError())); } while (false);
//...
// И далее такое:
//...
_TAPI (::CreateProcess(0, (LPWSTR)m_process.c_str(), 0,
0, FALSE, CREATE_SUSPENDED, 0, 0, &si, &pi));
В первую очередь ругаться, IMHO, надо лишь на сам алгоритм... А эстетические проблемы существуют в любом коде.
Такое название - уже говнокод.
Тоесть такой код повсеместно?
А зачем цикл, но выполняющийся один раз?
#define _TAPI(b) if (!((BOOL)(b))) throw(system_exception(GetLastError()));
Вполне себе справится.
if (condition)
_TAPI( Call1(...) );
else
_TAPI( Call2(...) );
do{}while(0) это старый трюк...
#define _TAPI(b) {if (!((BOOL)(b))) throw(system_exception(GetLastError())); }
И нет не какого висячего ифа.
Странно. Такой говнокод и минусуют...
А тут так часто. Не поняв код записывают его в "неговно", минусуя.
А нужно тот код, что непонимаешь - сразу в говнокод запихивать, ибо код для людей и должен быть понятен в команде разаработчиков. А машина, если дивайс не встроенный, то все схавает. Да и оптимизаторы сейчас хорошие.
ХаХаХа. )))
Чего не так сделал?
#define _TAPI(b) if (!((bool)(b))) throw(system_exception(GetLastError()));
Хотя тоже говно...
Не нужно такого утверждать, пока непрошёлся профлаером. Только узкие места требуют оптимизации. Сомневаюсь, что создание процесса - узкое место. Создание процесса в сотни раз дольше, чем конвертация из байта в 4 байта и обратно.
Улучшай алгоритм, а не делай бесполезную работу, котрую сделает оптимизатор. (с)
Я реверсер по совместительству =) поэтому отлично знаю что во что компилируется =). А про не оптимально это я просто к слову сказал. Кстати по поводу каста BOOL->bool даже mvs компилятор варнинг дает =)
>>Улучшай алгоритм, а не делай бесполезную работу, котрую сделает оптимизатор. (с)
полностью согласен, от себя добавлю: "..может ничего оптимизировать вообще нахуй не стоит и никто этого не заметит"
Откуда знаешь, что не болезненна? Ты на то и программист, чтобы твой софт работал нормально, то есть нужно проверить и говорить точно, а не "сомневаюсь". Сколько уже таких на оптимизатор надеялись, ипаааать...
Знаю, потому что не больно.
>Ты на то и программист, чтобы твой софт работал нормально
Он будет работать гораздо хуже, если я оптимизирую в ущерб читаемости кода(качества кода), а это значит, что исправлю меньше ошибок и удленню разработку.
>Сколько уже таких на оптимизатор надеялись, ипаааать...
И сколько же? Разве для каких-то мат вычислений критично, а для всего остального - не нужно. Например, какая может быть оптимизация в данном случае при создании процесса? Идиотизм. Не нужна она там. Лучше меньше строчек кода написать.
#define _TAPI(b) do {BOOL _b = (BOOL)(b); if (!_b) throw(system_exception(GetLastError())); } while (false);
>> m_process что сдесь значит?
да это совершенно не важно в контексте говнокода =)
>>Чего не так сделал?
>>#define _TAPI(b) if (!((bool)(b))) throw(system_exception(GetLastError()));
>>Хотя тоже говно...
да просто копипастил из
#define _TAPI_E(e) do {apierr _e = (e); if (_e) throw(system_exception(_e));} while(false);
да тож еще фича =)
а вообще использование таких макросов делает код более читаемым и понятным, чем постоянные ифы.
Неверю.
вот если бы его назвать как нить типа _THROW_IF_FALSE_API (ну неточно ибо я ж весь код не знаю, но смысл в том чтобы название не давало само по себе повода для размышлений человеку который код разбирает, например новому сотруднику и т.п.)
короче как и большинство вещей все есть палка о двух концах, макросы в том числе...
>да это совершенно не важно в контексте говнокода =)
Для меня важно. И да. Такое неговорящее название - тоже говнокод.