Скачать MetaTrader 5

Предупреждение об объявленной переменной

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
protr
358
protr  

Подскажите пожалуйста почему появляется предупреждение possible use of uninitialized variable 'Midle_price'. Спасибо.

   double F_First_price()
     {
      double Midle_price;

      if(Digits()==5 || Digits()==3)
        {
         if(Digits()==5) Midle_price=NormalizeDouble((Ask+Bid)/2,5);
         //if (Digits()== 5) double Midle_price = NormalizeDouble((Ask + Bid)/2,5);
         if(Digits()==3) Midle_price=NormalizeDouble((Ask+Bid)/2,3);
        }

      if(Digits()==4 || Digits()==2)
        {
         if(Digits()== 4) Midle_price = NormalizeDouble((Ask + Bid)/2,4);
         if(Digits()== 2) Midle_price = NormalizeDouble((Ask + Bid)/2,5);
        }

      Print("F_First_price ",Midle_price);
      return (Midle_price);
     }
Vladimir Karputov
Модератор
68436
Vladimir Karputov  
protr:

Подскажите пожалуйста почему появляется предупреждение possible use of uninitialized variable 'Midle_price'. Спасибо.

Код в сообщения форума, пожалуйста, вставляйте правильно: Правильно вставляем код на форуме (Ваше сообщения я исправил).

По поводу ошибки: нужно при объявлении переменной инициализировать эту переменную. Например так:

      double Midle_price=0.0;
Vasyl Nosal
19282
Vasyl Nosal  

Да. Меня тоже интересовало это предупреждение.

Знаю только как избавится. =0 написать 

Vasyl Nosal
19282
Vasyl Nosal  
Karputov Vladimir:

Код в сообщения форума, пожалуйста, вставляйте правильно: Правильно вставляем код на форуме (Ваше сообщения я исправил).

По поводу ошибки: нужно при объявлении переменной инициализировать эту переменную. Например так:

Так что это за предупреждение?

Если перевести, то вообще глупо получается.

 

Можно использовать неинициализированную переменную. И? Её и так используем, зачем предупреждать? 

Vladimir Karputov
Модератор
68436
Vladimir Karputov  
Vasyl Nosal:

Так что это за предупреждение?

Если перевести, то вообще глупо получается.

 

Можно использовать неинициализированную переменную. И? Её и так используем, зачем предупреждать? 

Чтобы не было глупо, просто не поленитесь и перевидите текст предупреждения. И вообще хорошим тоном считается обязательная инициализация переменных при объявлении.
Vasyl Nosal
19282
Vasyl Nosal  
Karputov Vladimir:
Чтобы не было глупо, просто не поленитесь и перевидите текст предупреждения. И вообще хорошим тоном считается обязательная инициализация переменных при объявлении.

Дык. Я же перевёл. Можно использовать неинициализированную переменную.

Так вы не знаете зачем это предупреждение?

Предлагаю ещё ввести  possible use of initialized variable

ну чтобы предупредило везде где можно:))))) 

George Merts
4731
George Merts  

Так ведь верное предупреждение !!!

И реально так и есть. Эта функция может вернуть мусор. (Например, если Digits() равно 1)

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

Vasyl Nosal
19282
Vasyl Nosal  
George Merts:

Так ведь верное предупреждение !!!

И реально так и есть. Эта функция может вернуть мусор. (Например, если Digits() равно 1)

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

Дада.

int i это не тоже самое что int i=0 

 

Какая функция? 

Alexey Volchanskiy
23012
Alexey Volchanskiy  
George Merts:

Так ведь верное предупреждение !!!

И реально так и есть. Эта функция может вернуть мусор. (Например, если Digits() равно 1)

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

Верно. Вдруг вы в  дальнейшем коде напишете что-то типа

Модераторы, у меня код не вставляется, 3 раза пробовал, опять форум глючит?? (10 минут позже..) Это был не форум, виноват Яндекс браузер, он код не вставляет. Вставил через FF.

double F_First_price()
{
    double Midle_price; // в переменной лежит мусор из стека
    // какой-то код, забыли, что переменная Midle_price неинициализирована  
    double realPrice = Midle_price * (Ask() - Bid()) * 1.1; // получили ерунду
Vasyl Nosal
19282
Vasyl Nosal  

Дык. С такой логикой можно и как код писать забыть.

Надо будет ввести напоминалку "Ты программист,ты программист..."

Бугагага... 

Alexey Volchanskiy
23012
Alexey Volchanskiy  
Vasyl Nosal:

Дык. С такой логикой можно и как код писать забыть.

Надо будет ввести напоминалку "Ты программист,ты программист..."

Бугагага... 

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

Я уже говорил, в 2-х иностранных конторах, где я кодил, штрафовали за код с ворнингами, выложенными на сервер контроля версий. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий