Библиотеки: Price_Compare - страница 2

 
fxsaber:

Конечно, можно! Но какое страшилище получится?

В библиотеке TypeToBytes без макросов было бы не просто страшно, но и не удобно. Т.е. библиотеку можно было бы просто выбрасывать.

Думаю, все дело в уровне владения языком. Когда ООП не знал/понимал - не использовал. Все изменилось.

а при чем тут уровень владения, речь ведь об использовании, а это отладка кода, которая с макросами затруднена...
 
coderex:
а при чем тут уровень владения, речь ведь об использовании, а это отладка кода, которая с макросами затруднена...

Макросы используются там, где отладка не нужна - вылизанный код.

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

Разработчики могут это сделать, но вряд ли будут (ключ -E  в C++). 

 
fxsaber:

Макросы используются там, где отладка не нужна - вылизанный код.

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

Разработчики могут это сделать, но вряд ли будут (ключ -E  в C++). 

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

на этом заканчиваю не нужный халивар

 
coderex:

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

Полностью уважаю Вашу точку зрения и доводы понятны. К сожалению, metaeditor.exe не имеет ключа -E. А он бы мог создавать чистый код, который можно было бы читать и подвергать отладке с полным набором удобств.

Во время написания чего-то не тривиального, создаю крайне поганый код. Понимая, что первое - это заставить работать ( и баги самих разраработчиков на этом этапе вылавливаются). Не всегда очевидно, как лучше архитектурно подойти. Бывают серьезные переделки, т.к. слабо осознаешь некоторые моменты в начале работы. После отладки идет выстраивание кривого кода в более логичный. Могут создаваться новые функции и макросы. Цель - сделать все логичным и убрать какие-либо повторения логики/кода. Код получается красивый, лаконичный и логичный.

Вот где реально тяжело заниматься отладкой, так это с шаблонами. Шаблоны - это навороченный препроцессор. И отладить крайне трудно. Например, при написании сверх-шаблонного TypeToBytes отладкой пользоваться было практически невозможно. Как и невозможно было написание кривого кода с последующим причесыванием. Приходилось все держать в голове и очень хорошо представлять, что и где происходит. Своего рода само-экзамен на понимание.

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

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Альтернативные реализации стандартных функций/подходов

fxsaber, 2016.09.02 10:58

Теперь работает всегда правильно, но быстрее оригинала всего на 10%
double MyNormalizeDouble( const double Value, const uint digits )
{
  static const double Points[] = {1.0e-0, 1.0e-1, 1.0e-2, 1.0e-3, 1.0e-4, 1.0e-5, 1.0e-6, 1.0e-7, 1.0e-8};
  const double point = digits > 8 ? 1.0e-8 : Points[digits];
  const long Integer = (long)Value; // чтобы не создавать крайне медленный относительный epsilon

  return((long)((Value > 0) ? (Value - Integer) / point + HALF_PLUS : (Value - Integer) / point - HALF_PLUS) * point + Integer);
}
#define HALF_PLUS (0.5 + 1.0e-7)
 

Почему макросы препроцессора злые и какие альтернативы?

Why are preprocessor macros evil and what are the alternatives?
Why are preprocessor macros evil and what are the alternatives?
  • stackoverflow.com
I have always asked this but I have never received a really good answer; I think that almost any programmer before even writing the first "Hello World" had encountered a phrase like "macro should never be used", "macro are evil" and so on, my question is: why? With the new C++11 is there a real alternative after so many years? The easy...
 
Alain Verleyen:

Почему макросы препроцессора злые и какие альтернативы?

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

 
fxsaber:

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

В том-то и дело, что макросы не защищены от неправильного использования.

Они появились, когда не было ни классов, ни шаблонов, ни констант.

Сейчас их использование не имеет смысла.

 
Koldun Zloy:

В том-то и дело, что макросы не защищены от неправильного использования.

Они появились, когда не было ни классов ни шаблонов.

Сейчас их использование не имеет смысла.

Неверное утверждение.

 
fxsaber:

Неверное утверждение.

Вы не сможете это обосновать.

Причина обращения: