Ошибка передачи NULL параметра в функцию - страница 3

 
Скажите, что такое "<<" ?
И что такое "cout << ..." ?

Мне, как пользователю cout <<, не интересно как она устроена, мне важен конечный результат, тем более, что разговор идет не про cout <<, а про передачу строкового параметра равного NULL в функцию. И различия между С++ и MQL здесь очевидны.
 
Мы сильно отвлеклись в сторону .. :))
Одно хочу сказать - не нужно делать утверждений не разобравшись предварительно.

Если вернуться к первому посту.
Никакой ошибки передачи параметра тут нет.
double func(string symbol, int timeframe, int shift)
{
   double res=iAC(symbol, timeframe, shift);
   Print("res=",res);
   res=iAC(NULL, timeframe, shift);
   Print("res=",res);
   return(res);
}

int start()
{
   func(NULL,PERIOD_M15,0);
   return(0);
}


Первый параметр функции func - это строка, NULL - это число 0.
В MQL (как и в JavaScript к примеру, и многих других языках) если на месте строки стоит цисло, то оно автоматически преобразуется в строку. Тут все правильно.

Есть другая ошибка.
Нельзя было в языке разрешать такую запись:

iAC(NULL, timeframe, shift)


1. Если у встроенной функции первый параметр строковый, то там должны писаться только строки.
2. Если написано на этом месте число, то оно всегда должно преобразовываться в строку.
3. Если NULL это просто константа 0, то она всегда и везде должна интерпретироваться как 0. Т.е. у NULL недолжно быть никаких других тайных смыслов.
4. Запись вида iAC(NULL, timeframe, shift) всегда должна быть эквивалентна iAC(0, timeframe, shift) и iAC("0", timeframe, shift).

Как проще всего разрешить эту проблему.

Во всех встроенных индикаторах для этих строковых параметров (символ), значения NULL и "0" считать эквивалентными - как отсутствие значения и использование Symbol(). Это как заплатка на то, что уже сделано. А если бы сначала правильно делать, то для обозначения текущего символа нужно было использовать пустую строку - "".
Все таки MQL наверное ближе к JavaScript, чем С.