Ошибки, баги, вопросы - страница 3336

 
fxsaber #:

Никогда не встречал внутри макроса какое-либо комментирование. Для того, чтобы удалить кусок из макроса, не комментировал, а удалял код внутри него.

#define подобен template, а template подобны обычным функциям. Внутри функций могу быть комментарии, а значит и внутри #define также могут быть комментарии. Кроме того, как Вы правильно заметили с помощью комментария можно исключить часть кода не удаляя его, т.е. использовать как переключатель контекста

И #define в отличии от template предоставляет куда более безграничные возможности. Поэтому в частности и непонятно почему число параметров в них в MQL ограничивается числом 8 - кроме простых сущностей толком ничего и записать нельзя

fxsaber #:

Перенос строки должен сшивать два слова? Это же текстовая замена, как в notepad.

В обычном языке перенос сам по себе сшивает слова

Мама мы-
ла раму

читается как

Мама мыла раму

а не

Мама мы ла раму

В С\C++ вместо дефиса '-' используется обратный слэш '\'

#define как Вы правильно заметили представляет собой текстовую замену, как допустим в notepad.

Это простые и интуитивно понятные всем несвязанные между собой Правила. Применяя их к коду последовательно: сначала #define, а затем перенос - получаем в результате: '4'. А как в MQL получилось '8' - это только Разработчики могу объяснить, при том, что у них обычный перенос не работает вообще:

 
A100 #:

Это простые и интуитивно понятные всем Правила.

Так сформулированные правила для меня совсем не просты и не интуитивны.

Знак переноса для того, чтобы сказать, что следующая строка является частью макроса - такое у меня интуитивное представление.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 
fxsaber #:

Так сформулированные правила для меня совсем не просты и не интуитивны.

Знак переноса для того, чтобы сказать, что следующая строка является частью макроса - такое у меня интуитивное представление.

Не просто частью, а именно продолжением (об этом даже в Документации сказано)

И в чем здесь противоречие Вашему пониманию?

#define MACRO unsigned\
int

Продолжаем - получаем

#define MACRO unsignedint
 
A100 #:

И в чем здесь противоречие Вашему пониманию?

В этом примере в моем понимании макрос состоит из двух строк. Т.е. после замены в "notepad" будет две строки.

 
A100 #:

Не просто частью, а именно продолжением (об этом даже в Документации сказано)

И в чем здесь противоречие Вашему пониманию?

Продолжаем - получаем

Если перед слэшем пробел поставить?

#define MACRO unsigned \
int
 
fxsaber #:

В этом примере в моем понимании макрос состоит из двух строк. Т.е. после замены в "notepad" будет две строки.

А где связь с Документацией?

Цитата: Каждая директива описывается отдельной записью и действует до переноса строки. Нельзя в одной записи использовать несколько директив. Если запись директивы получается слишком большой, то её можно разбить на несколько строк с помощью обратного слеша '\', в таком случае следующая строка будет считаться продолжением записи директивы.

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

Artyom Trishkin #:

Если перед слэшем пробел поставить?

Если поставить пробел, то и результат будет с пробелом:

#define MACRO unsigned int
 
A100 #:

следующая строка будет считаться продолжением записи директивы.

Если что-либо может быть понято неправильно, то оно обязательно будет понято неправильно.

 
В этом и разница
        \ //(1)
          //(2)
          //(3)

Строка (1) - это самостоятельная строка

Строка (2) - это продолжение строки (1)

Строка (3) - это следующая самостоятельная строка

 
A100 #:

Строка (2) - это продолжение строки (1)

Интуитивно для меня это вторая строка того же макроса - продолжение.

У меня нет представления, что любой макрос - это всегда одна строка после применения.

Причина обращения: