Обсуждение статьи "Изучение MQL5 — от новичка до профи (Часть II): Базовые типы данных и использование переменных" - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Кхм... Стесняюсь спросить, но придется...
Короче, а нафига неофиту настолько глубокое понимание литералов?
P.S. Я лично, хоть и далеко не неофит, провалил Ваш тест, ни на один вопрос правильно не ответив. В учебниках что-то похожее вроде встречал - то ли в Java, то ли в PHP - но это было так давно, и настолько не соответствует практическому коду, который приходилось читать или писать до сего дня... Не быть мне джуном в Вашей конторе. И... что?
P.P.S. Думаю, что если Вы напишете статью о литералах, она может оказаться полезной не только мне. ;-) Особенно если Вы поделитесь опытом, которого нет в справке... Правда, недокументированные возможности меня обычно ну очень сильно смущают, ибо слишком часто внезапно меняются в новых версиях, но, мало ли... Вдруг это будет действительно важно или хотя бы полезно?
Понимаешь. Вопрос не в том, как часто встречается, а в том, что люди не знают и не хотят знать тонкости. А про приведение типов, это нужно знать, так как это основа основ. Через это столько боли получается. Кстати, вот такой код, это не про приведение типов, а на задуматься:
Так вот, исходя из справки тут все нормально. Только, лично для меня, есть НЮАНС. По утверждениям разработчиков, mql писан на С++, а в C++ так нельзя, это UB, а вот в С все законно. Подобный код на плюсах я видел часто, и да он работал и работает, но, лично мне как-то стремно так писать, а вот стремно ли разработчикам mql, я не знаю. Поэтому я так никогда в mql делать не буду, потому, что реализацию не знаю.
По утверждениям разработчиков, mql писан на С++, а в C++ так нельзя, это UB, а вот в С все законно.
Прошу, таки, прощения, но разработчики утверждают, что язык программирования MQL максимально близок к С++, а не написан на нём. ))
С уважением, Владимир.
А про приведение типов, это нужно знать, так как это основа основ.
И даже пытаться спорить не буду. Вот абсолютно согласен. Просто... Ну, не все конструкции C одинаково полезны в MQL! :-)
По поводу кода "на задуматься"... Поскольку именно с C (обоими) я на "вы", для меня этот код вообще выглядит дичью. В справке тип enum отнесён к целым типам, и я вообще даже не думал, что он является структурой. Его смысл ведь совсем другой... Но спасибо, теперь буду знать - хотя толку с этого знания для меня лично вот вообще нет, не буду я такое использовать :-).
Так вот, исходя из справки тут все нормально.
А можно ссылочку?
По поводу кода "на задуматься"... Поскольку именно с C (обоими) я на "вы", для меня этот код вообще выглядит дичью. В справке тип enum отнесён к целым типам, и я вообще даже не думал, что он является структурой. Его смысл ведь совсем другой... Но спасибо, теперь буду знать - хотя толку с этого знания для меня лично вот вообще нет, не буду я такое использовать :-).
Это и есть дичь. Человек, видимо, писал с потолка и перепутал enum и union. Его пример не компилируется. Enum - это никакая не структура, а 4-х байтовое целое. Если брать union, то это прекрасно работает и в C++, и в MQL.
PS. По поводу первого примера из джунского собеседования и вопроса, насколько часто такое встречается - разумеется в чистом виде такое не встречается, т.к. пример рафинированный, но очень часто в коде вперемешку используются знаковые и беззнаковые целые, и тут проблемы вполне вероятны.Это и есть дичь. Человек, видимо, писал с потолка и перепутал enum и union. Его пример не компилируется. Enum - это никакая не структура, а 4-х байтовое целое. Если брать union, то это прекрасно работает и в C++, и в MQL.
PS. По поводу первого примера из джунского собеседования и вопроса, насколько часто такое встречается - разумеется в чистом виде такое не встречается, т.к. пример рафинированный, но очень часто в коде вперемешку используются знаковые и беззнаковые целые, и тут проблемы вполне вероятны.Естественно union)))
Насчет остального: https://en.cppreference.com/w/cpp/language/union
И да, я знаю, что дальше написано
Вот только, msvs, из справки которой это взято, не утверждает второе, хотя, вроде как и не нарывался пока никто. g++ и clang не смотрел, что по этому поводу говорят, но вряд ли другое.
Если хотите так юзать, юзайте - это ваше право и ваша боль, случись что))).
Естественно union)))
Насчет остального: https://en.cppreference.com/w/cpp/language/union
cppreference - ресурс полезный, но в силу справочного характера не в силу вместить все нюансы, которые можно найти только в спецификациях языка. Для их обобщения проще заглянуть на stackoverflow, и как резюме - для примитивных типов гарантируется побитовый "перенос" значений при чтении поля, даже если в него не делалась запись.
Это и есть дичь. Человек, видимо, писал с потолка и перепутал enum и union. Его пример не компилируется. Enum - это никакая не структура, а 4-х байтовое целое. Если брать union, то это прекрасно работает и в C++, и в MQL.
PS. По поводу первого примера из джунского собеседования и вопроса, насколько часто такое встречается - разумеется в чистом виде такое не встречается, т.к. пример рафинированный, но очень часто в коде вперемешку используются знаковые и беззнаковые целые, и тут проблемы вполне вероятны.Фух, картина мира восстановлена! :-) Про объединения и остальные сложные типы я как раз заканчиваю (надеюсь, если не будет очередных ляпов, должна выйти уже на следующей неделе).
P.S. MetaEditor не подсвечивает литералы с суффиксами `u` и `ull`, однако компилирует их. При этом подсвечивает `f`, но сообщает об ошибке... Интересно, это баг или намёк? :-)
Если вы - новичок и запутались в наших прениях, поясню, что в языке C (а также - C++) к цифровым литералам можно добавлять суффиксы, которые меняют тип данных. Например, суффикс `u` превращает обычное целое число (int) в беззнаковое (uint).
Попробуйте выполнить чуть изменённый скрипт, который предложил Vladimir Simakov (обратите внимание на отсутствие пробелов между цифрами и буквами, это важно):
Этот скрипт в первых строках выводит имена типов некоторых литералов, которые компилируются в языке MQL5.
Может, я собрал и не все работающие суффиксы, надеюсь, специалисты C меня поправят. Просто попробуйте понять логику - исходя из материала статьи, выдачи скрипта и нашей дискуссии, а если всё совсем непонятно - задавайте вопросы.