![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Речь у нас идет о передаче параметра по ссылке. В этом случае локальная переменная не создается, согласно стандарту языка Си и поэтому предупреждение о перекрытии внутренней переменной внешней ошибочно.
ссылочная переменная уже не переменная?
Какие теории? Какой стандарт? Ссылку про стандарт - в студию!
Вы документацию нашу читали? У нас даже в старой четвёрочной документации про это написано.
Передаваемые в функцию параметры являются локальными. Областью видимости является блок функции. Формальные параметры должны отличаться по именам от внешних переменных и локальных переменных, определенных внутри функции. В блоке функции формальным параметрам могут быть присвоены некоторые значения.
Если же говорить про локальные копии, а не передачу по ссылке, то в стандарте языка Си этого требования нет и это вполне законно так как внешняя и внутренняя переменные с одним именем это разные переменные и могут существовать внутри своей области видимости. Примеры этому можете найти в любом учебнике по СИ.
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.
Также можете взять любой стандартизированный компилятор языка Си и увидите что никаких предупреждений об этом там не выдается. Так зачем же тогда становится "святее папы римского" и требовать от людей то, что нет в стандарте языка?Если же говорить про локальные копии, а не передачу по ссылке, то в стандарте языка Си этого требования нет и это вполне законно так как внешняя и внутренняя переменные с одним именем это разные переменные и могут существовать внутри своей области видимости. Примеры этому можете найти в любом учебнике по СИ.
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 не зафиксировано." Это уже в форме шутки, ибо достало даже меня.
Локальной копии она не создает.
Гы. Она создаёт локальную ссылку (фактически переменную длиною в адрес, в нашем случае 32 бита), которая представлена именем уже существующей переменной. Компилятор работает с именами переменных, чтобы обеспечить доступ к этим самым переменным.
Идите уже учите матчасть по реализациям языков программирования
Речь у нас идет о передаче параметра по ссылке. В этом случае локальная переменная не создается, согласно стандарту языка Си
Гы. Она создаёт локальную ссылку, которая представлена именем уже существующей переменной.
Дайте уже человеку возможность супрессить анноингные варнинги )))
Доказательства представьте пожалуйста
"Если в функцию передаётся переменная, то при вызове функции создаётся её копия (выделяется память и копируется значение). Если в функцию передаётся ссылка (а не указатель) на объект, то никакая копия не создаётся, и все операции, которые производит функция, будут операциями над самим объектом, а не с его копией. Для указания того, какой подход используется, говорят либо о том, что объект передаётся по значению, либо о том, что объект передаётся по ссылке."
Так о каком тогда перекрытии переменных идет речь в предупреждении при передаче по ссылке?