![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А в mql5 будет возможно уже передавать структуры в экспортируемые функции из длл или пока что это не реализовано и можно только простые типы данных передавать?
Да, можно будет передавать. Только надо иметь в виду, что члены структур не выравниваются на границу, соответствующую их типу.
То есть будут передаваться упакованные структуры как сейчас структуры для rates передаются
надо просто указывать директиву компилятора в средах программирования я так полагаю для структур переданных с мт4 в dll
MQL5 - хотелось бы увидеть хороший препроцессор
имеется ввиду условная компиляция
#define debug 1
#if debug = 1
a=1;
#else
a=3;
#endif
Это вряд ли. Условная компиляция - источник трудноопределяемых ошибок. Будет функция типа IsDebug()
Это вряд ли. Условная компиляция - источник трудноопределяемых ошибок. Будет функция типа IsDebug()
Ну судя по всему нас ждет визуальный дебагер!
---
в классическом Си УСЛОВНАЯ компиляция конечно есть... и достаточно удобная штука!
много чего можно условно компилировать
любой инклудный файл серьезного проекта пестрит условной компиляцией
условная компиляция не только для дебуг применяется конечно, я условно написал
есть масса вариантов когда она хороша
еще один очень частный пример при определении версии чего либо переносимости к примеру
#define version 3
#if version = 2
// применяем приемы кода для версии WIN XP
#endif
#if version = 3
// применяем приемы кода для версии VISTA
// вызываем API VISTA
#endif
#if version = 4
// применяем приемы кода для версии WIN NT
#endif
#if version = 5
// применяем приемы кода для версии WIN 95 :-)))
#endif
---
--- еще как вариант создания сообщений на разных языках
#ifndef RUSSIAN
#pragma message("ВНИМАНИЕ!!!: ваш счет блокирован ")
#else
#pragma message("WARNING: Your account is lock")
#endif
В классическом Си условная компиляция была введена ради совместимости между разными платформами. Ради кучки теоритизирующих стандартизаторов.
#ifdef _DEBUG - это просто побочная возможность.
Условная компиляция - это огромный костыль, который можно поломать одним маленьким необнаружимым дефайном.
Все инклюды, содержащие ifdef _MAC_OS или ifdef _WINDOWS, нельзя считать серъёзными. Они только косят под серъёзность. По-настоящему, не должно быть ифдефов, должны быть разные исходники под разные платформы. Переносимость - это миф. Так называемые "переносимые коды" не являются эффективными. Поверьте моему 20-летнему опыту программирования на чистом Си.
stringo писал (а):
В классическом Си условная компиляция была введена ради совместимости между разными платформами. Ради кучки теоритизирующих стандартизаторов.
#ifdef _DEBUG - это просто побочная возможность.
Условная компиляция - это огромный костыль, который можно поломать одним маленькимнеобнаружимым дефайном.
Все инклюды, содержащие ifdef _MAC_OS или ifdef _WINDOWS, нельзя считать серъёзными. Они только косят под серъёзность. По-настоящему, не должно быть ифдефов, должны быть разные исходники под разные платформы. Переносимость - это миф. Так называемые "переносимые коды" не являются эффективными. Поверьте моему 20-летнему опыту программирования на чистом Си.
компилятор делает несколько проходов
самый первый проход ПРЕПРОЦЕССОРА
Вы имеете ввиду ситуацию когда проход препроцессора не найдет #define
#define mesg1 = 2
#if mesg1 = 2
блок
#else
блок
#endif
---
if {
блок
}
else
{
блок
}
по сути одно и то же, это как пример что в таком же случае компилятор может не понять и обычный if
- нет ожидаемого #define пропустили блок условной компиляции для условия #if mesg1 = 2
а как реально можно не найти конретно написанную команду... если конечно только компилятор сырой то да
c таким же успехом плохой компилятор может запутается в множесвенных скобках if { if { код if { if { if {if {кодif {кодif {кодif {if {кодif {код { код }}}код}}}код}}}}}}код}
впрочем вашему опыту я верю, да и переносимость MQL вряд ли нужна насколько я понимаю...
мне удавалось переносить с UNIX под PDP11 в RT11 и обратно, впрочем только машинно независимый код
Слава имел в виду "условная компиляция - зло, так как стимулирует написание некрасивого/кошмарного кода".
Портить язык директивами условной компиляции ни в коем случае не будем. Наша задача - сохранить простоту даже в ущерб функциональности.
Условная компиляция - это огромный костыль, который можно поломать одним маленьким необнаружимым дефайном.
Все инклюды, содержащие ifdef _MAC_OS или ifdef _WINDOWS, нельзя считать серъёзными. Они только косят под серъёзность. По-настоящему, не должно быть ифдефов, должны быть разные исходники под разные платформы. Переносимость - это миф. Так называемые "переносимые коды" не являются эффективными. Поверьте моему 20-летнему опыту программирования на чистом Си.
Слава, мы верим. Но большинству из нас не нужно совершенство. Мы хотим ехать с комфортом, а не любоваться красотой или скоростью кода. Я за условную компиляцию. Я уже давно об этом просил и спрашивал.
Слава имел в виду "условная компиляция - зло, так как стимулирует написание некрасивого/кошмарного кода".
Ренат, этого не может быть. Зло существует только в человеческом сознании. Нож - это зло. Он стимулирует на совершение убийства. Деньги - это зло. Они стимулируют давать взятки. Продолжать можно бесконечно. Направление продолжения зависит от позиции, от отношения, от важности...