warning: 'i' may be used uninitialized in this function

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

в строке 8  if (i<15)buf[i++] = a;  получаю сообщение, обозначенное в заголовка темы.

Не понимаю, почему "и" может быть не инициализирована?

    char buf[16];
    char command, a;
    int i;
                                          
    while( Serial.available()) {
      delay(30);
      a = Serial.read();
      if (i<15)buf[i++] = a;
      if (a == '\n' || a == '\0'){
        command = buf[0];
        }

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Потому что оно нигде и не инициализированно. Вот в 8й строчке i сравнивается с 15, а чему i при этом равно?

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

а если при объявлении ни чего не присвоить, она не будет равна нулю?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Если не присвоить, то можеи быть все что угодно. Может быть и 0 но никакой гарантии.

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Просто в дагонку, ещё одно сообщение, давно убрать не могу. Может кто знает что это?

Warning: Board arduino:avr:?# See: http://code doesn't define a 'build.board' preference. Auto-set to: AVR_?# SEE: HTTP://CODE

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Dmti пишет:

а если при объявлении ни чего не присвоить, она не будет равна нулю?

Я обращаю особое внимание на дату регистрации.

Ты, родное сердце, совсем себя не бережешь! Не стоит так голову перегружать. ;))))))) Может ну её, ардуину эту?

==================

насчет build.board, думаю, что ни слова не поймешь, но напишу, ...а вдруг?

В файле boards.txt для некой платы не определен параметр build.board.

Делается это добавлением строки вида:

uno.build.board=AVR_UNO

вместо "uno" -  название платы.

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Сообщение стало появляться после того, как я подключил STM32. Перед установкой делал резервное копирование файла boards.txt, но сообщение так и не убралось, даже после восстановления старого файла. Если умный, подскажи, что вместо уно прописать. Я в файлы настроек стараюсь не лазить, потому и не расбирался, что к чему.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Dmti пишет:

Если умный, подскажи

;)))) нет, не настолько же!!! Ты сам видишь, как твое сообщение об ощибке выглядит на форуме? С обрывками от какого-то html-ля.

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

И да, это не ошибка и ни на что не влияет. "Чинить" можно разьве что из

эстетических соображений.

-----------

пока что твои запросы полностью соответствуют аватару ;))). Редкая гармония! Респект!

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Сообщение целиком.

Using board 'uno' from platform in folder: D:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: D:\Program Files (x86)\Arduino\hardware\arduino\avr
Warning: Board arduino:avr:?# See: http://code doesn't define a 'build.board' preference. Auto-set to: AVR_?# SEE: HTTP://CODE
Detecting libraries used...

Больше красных сообщений нет. Всего одна строка, ни откуда не вырвана. Это не ошибка, а сообщение, и точно не начто не влияет, только глаз мазолит красным.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Мля!!! Специально сделал у себя такую же ошибку (предупреждение). Посмотри на мое сообще и на свое.

Я спросил, откуда в твоем сообщении обрывки html??????? У тебя со зрением проблемы или и правда с головой????

Using board 'nano' from platform in folder: /home/wlad/ArduinoIDE/hardware/arduino/avr
Using core 'arduino' from platform in folder: /home/wlad/ArduinoIDE/hardware/arduino/avr
Warning: Board breadboard:avr:atmega328bb doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328BB
Detecting libraries used...

Вот ЧТО у тебя написано там, где у меня atmega328bb ???????

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

:) Доперло, вот точно так-же как и у тебя со зрением.Текст просто копирую, вот и посмотри что у меня там написано. Я потому и разобраться не могу.

Может файл boards прислать, что понятнее будет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

asam пишет:

Если не присвоить, то можеи быть все что угодно. Может быть и 0 но никакой гарантии.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmti пишет:

а если при объявлении ни чего не присвоить, она не будет равна нулю?

Будет.

Только если бы Вы не качали права перед компилятором, а написали бы вместо "int i;" вот так "int i = 0;" проблемы бы никакой не было, и не надо было бы на форум постить.

Так трудно нолик дописать?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Ваще, объявлять глобальную переменную с именем i - одна из самых (если не самая) плохих идей. Случайно засрать её - как два пальца, а потом опять "памагити!!!".

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Да, сразу после первого топика и дописал. Просто раньше при инициализации, если переменная равна нулю - оперцию присвоение не делал, и на сообщения не мешающие компиляции не смотрел, а сегодня глянул. :)

Переменная i объявлена в нутри функции.

#ifndef __PORTS_H__
#define __PORTS_H__

  void portas(void){//Управляем через порт

    uint16_t gg;
    uint8_t dd,mm,cc;

    char a;
    char buf[16];
    char command[2] = "x";
    int i = 0;
                                          
    while( Serial.available()) {
      delay(30);
      a = Serial.read();
      if (i<15)buf[i++] = a;
      if (a == '\n' || a == '\0'){
        command[0] = buf[0];
        }
    switch (command[0]){

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmti пишет:

Переменная i объявлена в нутри функции.

Из начального топика это никак не следовало. А если так, то это было совсем плохо, ибо она вообще неизвестно чему было равна (а вовсе никакоиу не нулю) - см. #1

Dmti пишет:

на сообщения не мешающие компиляции не смотрел

Это очень, очень, ну просто очень большая глупость. Всегда смотрите! Люди Вам помогают ошибок избежать, а Вы плюёте на это.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Dmti пишет:

Да, сразу после первого топика и дописал. Просто раньше при инициализации, если переменная равна нулю - оперцию присвоение не делал, и на сообщения не мешающие компиляции не смотрел, а сегодня глянул. :)

Переменная i объявлена в нутри функции.

#ifndef __PORTS_H__
#define __PORTS_H__

  void portas(void){//Управляем через порт

    uint16_t gg;
    uint8_t dd,mm,cc;

    char a;
    char buf[16];
    char command[2] = "x";
    int i = 0;
                                          
    while( Serial.available()) {
      delay(30);
      a = Serial.read();
      if (i<15)buf[i++] = a;
      if (a == '\n' || a == '\0'){
        command[0] = buf[0];
        }
    switch (command[0]){

 

Так какому сообщению верить, этому или тому, что в посте №0?