Ошибки, баги, вопросы - страница 3336
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Никогда не встречал внутри макроса какое-либо комментирование. Для того, чтобы удалить кусок из макроса, не комментировал, а удалял код внутри него.
#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" будет две строки.
А где связь с Документацией?
Цитата: Каждая директива описывается отдельной записью и действует до переноса строки. Нельзя в одной записи использовать несколько директив. Если запись директивы получается слишком большой, то её можно разбить на несколько строк с помощью обратного слеша '\', в таком случае следующая строка будет считаться продолжением записи директивы.
Т.е. макрос не может состоять из двух строк - он всегда состоит из одной строки, но длинный макрос обратным слешем можно разбить так, что следующая строка будет считаться продолжением предыдущей
Если перед слэшем пробел поставить?
Если поставить пробел, то и результат будет с пробелом:
следующая строка будет считаться продолжением записи директивы.
Если что-либо может быть понято неправильно, то оно обязательно будет понято неправильно.
Строка (1) - это самостоятельная строка
Строка (2) - это продолжение строки (1)
Строка (3) - это следующая самостоятельная строка
Строка (2) - это продолжение строки (1)
Интуитивно для меня это вторая строка того же макроса - продолжение.
У меня нет представления, что любой макрос - это всегда одна строка после применения.