Неточность в языке.

 
Если в скрипте переменная неописана,
то как и положено в С выдается сообщение об ошибке.

Но если написать так:
	for (int i = Length; i >= 0; i--) 
	{
	  int a; 
	  ........ 
	}
	.......
	a = 1;

то в MQL все работает, а в С работать не будет.

Это сильно выходит за рамки того, что есть в большинстве языков, а не только С.
Ошибка наверное, нужно бы поправить.

 
Ошибка наверное, нужно бы поправить.

Ну вобщем-то не такая страшная ошибка, даже скорее относительно безобидная фича.
 
Это не фича - это грубейшее нарушение нескольких принципиальных поняний в современных языках. И С, читать который вы всех отсылаете, в том числе.
 
Это не фича - это грубейшее нарушение нескольких принципиальных поняний в современных языках. И С, читать который вы всех отсылаете, в том числе.

Расширение области видимости _после_ описания - это не страшно и приемлемо. Вот если бы переменная была видна _до_ описания - тогда это была бы явная проблема. Языки и спецификации мы отлично знаем. Это - фича MQL (MQL все таки не чистый C и нам это подходит).
 
Это - фича MQL (MQL все таки не чистый C и нам это подходит).

Это ваше право.

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

Как к примеру будет работать такой скрипт?
string A = "....";
int start()
{
.............
	if (Close[1] > ....) 
	{
	  int A;
	  ...........
	}
	if (A == "Buy") ...............
}


Подобных примеров может быть куча ...
И вы думаете, что все юзера будут писать все как надо (с учетом ваших "фич")?

Вам не кажется, что сейчас вы закладываете "бомбу" ...?
Поправить то не поздно, и не сложно.

Почему-то старая шутка вспомнилась.
Про то, как в майкрософте постановили баги переименовывать в фичи.
И все сразу стало лучше .. :)

 
С таким кодом программист сам себе враг. Должен же человек на чем то учится.
 
Ренат, на такой код может любой напороться, в том числе и вы.
Я привел только один пример, но таких вариантов много,
и найти подобную ошибку будет очень сложно.
Зачем самому копать себе яму ..

Я ведь не прошу добавить какую нибудь фичу.
Я прошу исправить явную и очень опасную ошибку,
которая принципиально изменяет свойства языка.

Я вас вообще не понимаю.
Такое ощущение, что вам нужно просто поскорее сбыть с рук МТ4 ..
И неважно в каком состоянии.
---------------------------------

Ладно, думаю можно считать эту тему законченной.
 
Приведенный Вами код сразу же выдаст ошибку на сравнении if (A == "Buy") , так как int A; уже перехватил область видимости.

Я привел только один пример, но таких вариантов много,

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

Программирование - это не та область, где позволительно грубо нарушать правила программирования, сваливая свои грехи на компилятор. Кстати, я и в Visual C++ смогу нарыть столько потенциально опасных мест из-за того что компилятор пропустил опасное место и не был достаточно умен чтобы мне на это указать. Мы каждый свой проект придирчиво прогоняем через Lint и находим такие плюшки, которые пропустил стандартный компилер.

С областями видимости мы все-таки разберемся. Спасибо что подняли тему.
 
Вот еще забавный вариант.
//+------------------------------------------------------------------+
//|                                                        Test1.mq4 |
//|                                  Copyright © 2005, Yuri Makarov. |
//|                                       http://mak.tradersmind.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Yuri Makarov."
#property link      "http://mak.tradersmind.com"

string s = "QQQ";
int start()
{
   Print("---------------------------");
   for (int i = 0; i < 10; i++) 
   {
      Print("i = ",i,"  S = ", s);
      if (i > 5) {int s = i*i;}
      Print("          S = ", s);
   }
   return(0);
}


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

 
Но пытаясь тестировать разные примеры увидел что отчасти вы это делаете

Область видимости отслеживается нормально, но продлевается до конца функции. Это может быть только очень слабовозможной проблемой при совершенном игнорировании правил программирования. Но тот, кто нарушает такие правила - нарушит еще кучу и все равно сделает ошибку.

Только рабочие, а не такие что человек сам специально роет себе могилу, используя маловразумительные переменные, смешивая локальные с глобальными.

К сожалению, рабочего кода я так и не увидел - опять "я счас себе могилу вырою, а вы меня спасите".
За такой код программисту надо сразу по рукам бить. Или, что более гуманно - дать ему возможность вдоволь ощутить прелесть самостоятельного осознания своей ошибки :-) Это дисциплинирует сразу же.
Шутка конечно же, но писать надо чисто и так чтобы не придрались.
 
Это может быть только очень слабовозможной проблемой при совершенном игнорировании правил программирования. Но тот, кто нарушает такие правила - нарушит еще кучу и все равно сделает ошибку.

Все нарушают - и вы тоже.
Если бы это было не так, небыло бы багов ...
От квалификации это не очень сильно зависит.
Ну и зачем создавать себе сложности, чтобы потом их преодолевать?
К сожалению, рабочего кода я так и не увидел - опять "я счас себе могилу вырою, а вы меня спасите".
За такой код программисту надо сразу по рукам бить.

Вы хотите чтобы я вам несколько листов рабочего кода написал?
Это макет ситуации.
Представте, что тут несколько листов кода, и что переменные имеют осмысленные названия, и что
   for (int i = 0; i < 10; i++) 
   {
      Print("i = ",i,"  S = ", s);
.......

находится на первом листе, а

      if (i > 5) {int s = i*i;}
      Print("          S = ", s);
   }

на последнем.
Представили?
Ну и славно.

Я просто обратил ваше внимание на нехорошее место в языке.
И честно говоря у меня нет времени и желания изобретать (из пальца) разные примеры.
Эти примеры будут потом, в реальной жизни.