Нужна ли конструкция #ifdef #else #endif в дополнение к #define ? - страница 4

 
TheXpert:

Ура!!!! Правда критичны только копи-конструктор и копи-оператор, все остальное можно реализовать через них.

Мысль отличная в свете того, что упор делается таки на программистов.

Тогда первым делом логично было бы уподобить структуру файлов и проекта. Сейчас допустим библиотеками пользоваться не особо удобно, тем более класс импортом не достанешь.

Это да, но конструкция линейная, так что негативные последствия будут оперативно лататься более пряморукими обитателями форума :)

Да кстати эти ifdef-ы если мне память не изменяет были придуманы как раз для переносимости кода. То есть использование одного кода в разных платформах.


Кстати мне кажется, что наличие препроцессора , как он там кстати раньше назывался - c0s кажется :)) Ну не суть... - Так вот,  наличие препроцессора для MQL5 это очень важно и открывает весьма широкие возможности. Но вот надо как-то продумать как это вообще можно сделать без ломки идеи.


Дело в тот, что многие не знают, как работает CUDA и то что ей совершенно по фигу что за компилятор. Ну то есть встроить ее в MQL5 при наличии препроцессора вообще дело пяти минут. То есть она работает так - запускается их компилятор которому говориться кого после себя запускать. А он уже генерирует код который компилируется следующим компилятором. То есть он заменяет конструкции CUDA на вызовы библиотек. То есть вот только наличие возможности иметь препроцессор дает КОЛОССАЛЬНЫЙ ШАГ в плане расширения. Причем по большому счету на первом этапе можно обойтись и даже просто батником.


Да еще пару слов - идея максимальной совместимости с С++ это просто супер. Причем ведь если задуматься обслуживание из-за этого только УПРОЩАЕТСЯ. По всем вопросам пользователи отправляются к справочникам и книжкам.


Так что я бы вот много чего мог бы наделать для себя при наличии отдельного препроцессора - начиная от того что можно код генерировать из некого мета языка, и кончая тем что такая технология позволяет использовать сторонних производителей тулсов.


 
Да еще пару слов - идея максимальной совместимости с С++ это просто супер.

Почему бы тогда не сделать возможным и компиляцию автономных dll из MetaEditor? Это позволит не зависеть от среды, и при желании подключать наработки MQL5 к любой торговой среде, к MQL6 опять же, к MQL4(он еще будет у ДЦ какое-то время). И в тоже время - будет сильнейшим рекламным ходом от MQ, ведь каждый новый трейдер(или юридическое лицо), думая, что изучать, остановится именно на MQL и MT, т.к. будет знать, что не прогадает в любом случае, если есть возможность универсального переноса кода. Сколько народу сейчас вынуждено переписывать код с четверки - зачем людям проблемы создавать, когда можно этого не делать? А то приходится все время еще и думать, а как бы так написать, чтобы потом перенести без проблем.

P.S. Вот закончу проект - и опять проблема, чтобы dll сделать - 5000 строк переносить в среду другого языка, адаптировать...

 
-Alexey-:

Почему бы тогда не сделать возможным и компиляцию автономных dll из MetaEditor? Это позволит не зависеть от среды, и при желании подключать наработки MQL5 к любой торговой среде, к MQL6 опять же, к MQL4(он еще будет у ДЦ какое-то время). И в тоже время - будет сильнейшим рекламным ходом от MQ, ведь каждый новый трейдер(или юридическое лицо), думая, что изучать, остановится именно на MQL и MT, т.к. будет знать, что не прогадает в любом случае, если есть возможность универсального переноса кода. Сколько народу сейчас вынуждено переписывать код с четверки - зачем людям проблемы создавать, когда можно этого не делать? А то приходится все время еще и думать, а как бы так написать, чтобы потом перенести без проблем.

P.S. Вот закончу проект - и опять проблема, чтобы dll сделать - 5000 строк переносить в среду другого языка, адаптировать...

Не, тока не DLL.
 
Interesting:
Не, тока не DLL.
А что так? Можно, конечно, и без, но тогда надо, чтобы код из MKL5 в С++ вставить - и он работал.
 
-Alexey-:
А что так? Можно, конечно, и без, но тогда надо, чтобы код из MKL5 в С++ вставить - и он работал.
На DLL разработчики точно не пойдут, безопасность и тд. Об остальном нужно договариваться.
 

Снова возникла "острая необходимость" в #ifdef / #ifndef

Разработчики, стоит ли ждать появления этой конструкции в ближайшее время ? 

 

Хочется такого:

#ifdef _X64_

#import "Kernel32.dll"
   ulong LoadLibraryW( string lpFileName );
   uint FreeLibrary( ulong hModule );
   ulong GetProcAddress( ulong hModule, char& procName[] );
#import

#else

#import "Kernel32.dll"
   uint LoadLibraryW( string lpFileName );
   uint FreeLibrary( uint hModule );
   uint GetProcAddress( uint hModule, char& procName[] );
#import

#endif
 

В свете выхода нового MQL4++ Конструкция #ifdef #endif нужна как воздух, для кроссплатформенной компляции программ MQL4 <--> MQL5, когда API зависимые функции типа OrderSend обрамляются макросом условной компиляции:

#ifdef MQL5
  bool  OrderSend(MqlTradeRequest& request, MqlTradeResult& result);
#else
  int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
#endif
 
C-4:

В свете выхода нового MQL4++ Конструкция #ifdef #endif нужна как воздух, для кроссплатформенной компляции программ MQL4 <--> MQL5, когда API зависимые функции типа OrderSend обрамляются макросом условной компиляции:

  Согласен, очень нужна.
 
C-4:

В свете выхода нового MQL4++ Конструкция #ifdef #endif нужна как воздух, для кроссплатформенной компляции программ MQL4 <--> MQL5, когда API зависимые функции типа OrderSend обрамляются макросом условной компиляции:

с тех пор как отрастила жабры
 дышать вот заново учусь
 когдато был ты мне как воздух
 как воздух впрочем и теперь

siberian_huskie, 22.05.2011

#define PLATFORM(mt5, mt4)   mt4     // building to mt4
// #define PLATFORM(mt5, mt4)   mt5     // building to mt5
....
...........
.....
PLATFORM(  // if PLATFORM mt5
  bool  OrderSend(MqlTradeRequest& request, MqlTradeResult& result);
,  // else PLATFORM  mt4
  int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
)  // end PLATFORM
Причина обращения: