Ошибки, баги, вопросы - страница 3335
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вроде, и должно быть "1"
Подсказка: комментарий /**/ - это пробел. Заменяем - получаем ожидаемый результат:
и не перепутайте с другим примером. Здесь ошибка именно в комментарии /**/, а там была ошибка при переносе строки \Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
A100, 2023.06.01 10:42
Кстати перенос строки на #define - с ошибкой работает. Пример с ним ошибки при выполнении:
Результат: 4
Ожидалось: 8
Подсказка: комментарий /**/ - это пробел. Заменяем - получаем ожидаемый результат:
и не перепутайте с другим примером. Здесь ошибка именно в комментарии /**/, а там была ошибка при переносе строки \Подсказка: комментарий /**/ - это пробел. Заменяем - получаем ожидаемый результат:
Никогда не встречал внутри макроса какое-либо комментирование. Для того, чтобы удалить кусок из макроса, не комментировал, а удалял код внутри него.
Результат: 4
Ожидалось: 8
Перенос строки должен сшивать два слова? Это же текстовая замена, как в notepad.
Никогда не встречал внутри макроса какое-либо комментирование. Для того, чтобы удалить кусок из макроса, не комментировал, а удалял код внутри него.
#define подобен template, а template подобны обычным функциям. Внутри функций могу быть комментарии, а значит и внутри #define также могут быть комментарии. Кроме того, как Вы правильно заметили с помощью комментария можно исключить часть кода не удаляя его, т.е. использовать как переключатель контекста
И #define в отличии от template предоставляет куда более безграничные возможности. Поэтому в частности и непонятно почему число параметров в них в MQL ограничивается числом 8 - кроме простых сущностей толком ничего и записать нельзя
fxsaber #:
Перенос строки должен сшивать два слова? Это же текстовая замена, как в notepad.
В обычном языке перенос сам по себе сшивает слова
читается как
а не
В С\C++ вместо дефиса '-' используется обратный слэш '\'
#define как Вы правильно заметили представляет собой текстовую замену, как допустим в notepad.
Это простые и интуитивно понятные всем несвязанные между собой Правила. Применяя их к коду последовательно: сначала #define, а затем перенос - получаем в результате: '4'. А как в MQL получилось '8' - это только Разработчики могу объяснить, при том, что у них обычный перенос не работает вообще:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
A100, 2023.05.10 10:09
Ошибка при компиляции:Это простые и интуитивно понятные всем Правила.
Так сформулированные правила для меня совсем не просты и не интуитивны.
Знак переноса для того, чтобы сказать, что следующая строка является частью макроса - такое у меня интуитивное представление.
Так сформулированные правила для меня совсем не просты и не интуитивны.
Знак переноса для того, чтобы сказать, что следующая строка является частью макроса - такое у меня интуитивное представление.
Не просто частью, а именно продолжением (об этом даже в Документации сказано)
И в чем здесь противоречие Вашему пониманию?
Продолжаем - получаем
#define MACRO unsignedintИ в чем здесь противоречие Вашему пониманию?
В этом примере в моем понимании макрос состоит из двух строк. Т.е. после замены в "notepad" будет две строки.
Не просто частью, а именно продолжением (об этом даже в Документации сказано)
И в чем здесь противоречие Вашему пониманию?
Продолжаем - получаем
Если перед слэшем пробел поставить?
В этом примере в моем понимании макрос состоит из двух строк. Т.е. после замены в "notepad" будет две строки.
А где связь с Документацией?
Цитата: Каждая директива описывается отдельной записью и действует до переноса строки. Нельзя в одной записи использовать несколько директив. Если запись директивы получается слишком большой, то её можно разбить на несколько строк с помощью обратного слеша '\', в таком случае следующая строка будет считаться продолжением записи директивы.
Т.е. макрос не может состоять из двух строк - он всегда состоит из одной строки, но длинный макрос обратным слешем можно разбить так, что следующая строка будет считаться продолжением предыдущей
Если перед слэшем пробел поставить?
Если поставить пробел, то и результат будет с пробелом: