Такой забавный NULL...

 

Грешным делом, думал основы MQL4 худо-бедно знаю. Однако, "и про старуху бывает порнуха" (с) народное.

Сегодня узнал следующее:

1.Нельзя использовать NULL в качестве выражения инициализации export-переменных.

2.Нельзя использовать NULL в качестве значения по умолчанию в параметрах функции.

3.Неизвестно, как проверить, что строка содержит NULL.

4.Никогда не догадаетесь, что напечатает этот простенький скрипт:

int start() {
  string a = NULL;
  Print(StringLen(a));
  return(0);
}
 
Длина такой строки один символ.
 
Zhunko:
Длина такой строки один символ.

ВНЕЗАПНО, да? :)
 

https://docs.mql4.com/ru/basis/types/casting

https://docs.mql4.com/ru/constants/special

Azzx:

ВНЕЗАПНО, да? :)

Может быть для вас и внезапно, а так - коллизия.

 

Azzx:
ВНЕЗАПНО, да? :)
Не совсем. Этот скрипт прояснит почему так:

void start()
 {
  string a = NULL;
  Alert("\"", a, "\", ", StringLen(a), ", ", StringGetChar(a, 0));
 }
Этот NULL преобразуется в строчный нуль.
 
FAQ:

https://docs.mql4.com/ru/basis/types/casting

https://docs.mql4.com/ru/constants/special


Может быть для вас и внезапно, а так - коллизия.


Для меня - да: ВНЕЗАПНО.

Как я и сказал "и про старуху...". :)

 
 
FAQ:
RTFM
Вопрос не в том, что RTFM, а в том, что если null / NULL- это общепринятое понятие-
а кто-то переопределил семантику- то это на самом деле не проблема того, кто не rtfm.
То же самое, кстати, с short-circuite or/and || / &&.
 
jartmailru:
Вопрос не в том, что RTFM, а в том, что если null / NULL- это общепринятое понятие-
а кто-то переопределил семантику- то это на самом деле не проблема того, кто не rtfm.
То же самое, кстати, с short-circuite or/and || / &&.

Да, я тоже по этому поводу в недоумении. Понятно, почему так сделали, но зачем вообще сохранили это обозначение?

Впрочем, это явно в русле общего MQL-подхода.

 
Azzx: Впрочем, это явно в русле общего MQL-подхода.

Блин, ну надоело уже, вам не нравится этот язык, терминал, подход ? Что вы в этом случае здесь делаете ??? Есть куча других "прекрасных" платных и "современных" терминалов, с чудными языками и поддержкой, почему бы вам не пойти туда ?
 
FAQ:

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

В процессе. Впрочем, я собственных языков изобретать не люблю.

А вот кстати, раз уж вы такой знаток RTFM-ов, а не растолкуете ли мне тогда поведение вот этого кода:

int start() {
  string a = NULL;
  Print(iMA(a, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1));
  Print(iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1));
  
  return(0);
}

Я потерял сегодня кучу времени на этой штуке... :(

Переписываю, понимаете ли, код - это полезно иногда делать.

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