MetaTrader 4 Client Terminal build 604 - страница 34

 
Andrei01:
Речь у нас идет о передаче параметра по ссылке. В этом случае локальная переменная не создается, согласно стандарту языка Си и поэтому предупреждение о перекрытии внутренней переменной внешней ошибочно.

ссылочная переменная уже не переменная?
 
MetaDriver:
ссылочная переменная уже не переменная?

Локальной копии она не создает.
 
stringo:

Какие теории? Какой стандарт? Ссылку про стандарт - в студию!

Вы документацию нашу читали? У нас даже в старой четвёрочной документации про это написано.

Передаваемые в функцию параметры являются локальными. Областью видимости является блок функции. Формальные параметры должны отличаться по именам от внешних переменных и локальных переменных, определенных внутри функции. В блоке функции формальным параметрам могут быть присвоены некоторые значения.

Если же говорить про локальные копии, а не передачу по ссылке, то в стандарте языка Си этого требования нет и это вполне законно так как внешняя и внутренняя переменные с одним именем это разные переменные и могут существовать внутри своей области видимости. Примеры этому можете найти в любом учебнике по СИ.

https://ru.wikipedia.org/wiki/%D0%A1%D0%B8_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 Никакого запрета про одинаковость имен переменных там нет поэтому выходит что это просто прихоть языка MQL4.

Также можете взять любой стандартизированный компилятор языка Си и увидите что никаких предупреждений об этом там не выдается. Так зачем же тогда становится "святее папы римского" и требовать от людей то, что нет в стандарте языка?
 
Andrei01:

Если же говорить про локальные копии, а не передачу по ссылке, то в стандарте языка Си этого требования нет и это вполне законно так как внешняя и внутренняя переменные с одним именем это разные переменные и могут существовать внутри своей области видимости. Примеры этому можете найти в любом учебнике по СИ.

https://ru.wikipedia.org/wiki/%D0%A1%D0%B8_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 Никакого запрета про одинаковость имен переменных там нет поэтому выходит что это просто прихоть языка MQL4.

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

О каком стандарте идёт речь? О стандарте Си или о стандарте Си плюс плюс?

Как эти стандарты соответствуют языку MQL4/MQL5, которые не имеют никакого стандарта. Кто Вам обещал стандарты? Поворчать сюда пришли?

Вас просто предупреждают о возможных коллизиях.



"Анноит? Пиши комплейн" (ц) Фидо.

"Комплейн рассмотрен. Принято решение об экскоммуникации с резолюцией "поциент не соглашается с прихотями языка MQL4, при этом установлено, что поциент предварительно не обращался с комплейном ни в какой комитет по стандартизации. Нарушений FTS rules не зафиксировано." Это уже в форме шутки, ибо достало даже меня.

 
Andrei01:
Локальной копии она не создает.


Гы. Она создаёт локальную ссылку (фактически переменную длиною в адрес, в нашем случае 32 бита), которая представлена именем уже существующей переменной. Компилятор работает с именами переменных, чтобы обеспечить доступ к этим самым переменным.

Идите уже учите матчасть по реализациям языков программирования

 
Andrei01:
Речь у нас идет о передаче параметра по ссылке. В этом случае локальная переменная не создается, согласно стандарту языка Си
Доказательства представьте пожалуйста
 
stringo:

Гы. Она создаёт локальную ссылку, которая представлена именем уже существующей переменной.

Создание локальной ссылки и локальной переменной это разное.
 

Дайте уже человеку возможность супрессить анноингные варнинги )))

 
stringo:
Доказательства представьте пожалуйста
Из ссылки про язык си из википедии выше:

"Если в функцию передаётся переменная, то при вызове функции создаётся её копия (выделяется память и копируется значение). Если в функцию передаётся ссылка (а не указатель) на объект, то никакая копия не создаётся, и все операции, которые производит функция, будут операциями над самим объектом, а не с его копией. Для указания того, какой подход используется, говорят либо о том, что объект передаётся по значению, либо о том, что объект передаётся по ссылке."

Так о каком тогда перекрытии переменных идет речь в предупреждении при передаче по ссылке?

 
Уважаемые разработчики!
Функция ChartIndicatorDelete в 604-м - есть, а вот функции ChartIndicatorAdd - нету. Это же парные функции. Добавьте пожалуйста ChartIndicatorAdd в 604-й. Часто это очень нужно.
Причина обращения: