Arduino IDE непонятное пишет

Тема в разделе "Arduino & Shields", создана пользователем timon, 15 ноя 2018.

  1. parovoZZ

    parovoZZ Гуру

    писдишЪ
    ты фуры не разгружаешь, а загружаешь!
     
  2. DetSimen

    DetSimen Спамовредитель Модератор

    эти операции не эквивалентны. разгружаешь то полную тару, а загружаешь - пустую
     
    ИгорьК нравится это.
  3. DetSimen

    DetSimen Спамовредитель Модератор

    а нас, я думаю, перетащут в "Тупые сообщения". по крайней мере, мои сапщения - точно можно туда.
     
    ИгорьК нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Закон разбитого окна.
    Если администраторы долго не наводят порядок, все больше и больше народа думает "почему этого и этого не модерируют. Я тоже могу немного пошалить"
     
    DIYMan нравится это.
  5. DetSimen

    DetSimen Спамовредитель Модератор

    ну я прашупращенья.
    Все. На сегодня мир уже заиграл своими яркими, 32-битными красками. Паду устраивать дебош. :) Дапанидельнега.
    То самое чуство, после третьей, когда сидишь, касаясь холодного стекла, роняя пепел на стол, и размышляешь о незадавшейся жизни. :)
     
    Последнее редактирование: 16 ноя 2018
    DIYMan нравится это.
  6. Airbus

    Airbus Радиохулиган Модератор

    Кот я в игре.Завтра выходной
    [​IMG]
     
    DetSimen нравится это.
  7. parovoZZ

    parovoZZ Гуру

    оба! сдристнули отсюда нахер! здесь вам не питейная!
     
    Airbus и DetSimen нравится это.
  8. Asper Daffy

    Asper Daffy Иксперд

    Мужики, не срача окаянного ради, но исключительно пользы для, позвольте внести ясность. Все ссылки с номерами пунктов и страниц в тексте ниже на документ ISO-IEC 14882 - 2017

    1. По поводу глобальных, статических и т.п. переменных:«Каждый объект со статическим расположением, инициализируется нулями в самом начале программы, до любых других инициализаций. В некоторых случаях, позже происходит его повторная инициализация» (п. 11.6.10,стр.234)

    2. Теперь по поводу динамических, локальных и прочих переменных.

    2.1 Если не указано никакого инициализатора, то объект default-initialized (п. 11.6.12,стр.234)

    2.2 Если в качестве инициализатора указаны пустые скобки, то объект value-initialized (п. 11.6.11,стр.234)

    Слова «default-initialized» и «value-initialized» означают следующее.

    default-initialize объекта типа T означает (опускаем случаи, когда T – класс): если Т – массив, то каждый элемент default-initialized, если не массив, то никакая инициализация не выполняется (п. 11.6.7.3, стр. 233)

    value-initialize объекта типа T означает (опускаем случаи, когда T – класс): если Т – массив, то каждый элемент value-initialized, если не массив, то инициализируется нулём (п. 11.6.8.4, стр. 233)

    Таким образом,

    Код (C++):
    int * n = new int;    // *n не инициализирована
    int * n = new int();  // *n инициализирована нулём
    Однако, настоятельно не рекомендую этим пользоваться. Ну, напишите вы

    Код (C++):
    int * n = new int(0);    // *n инициализирована нулём
    от вас не убудет.

    Дело в том, что пустые скобки в качестве инициализатора допустимы далеко не везде. Например,

    Код (C++):
    int n(0); // всё нормально
    int n();    // хренушки, здесь описана не переменная n,
               // а функция n без аргументов, возвращающая int (п. 11.6.11,стр.234).
    И вот оно Вам надо, постоянно про эти тонкости помнить?
     
    DIYMan нравится это.
  9. parovoZZ

    parovoZZ Гуру

    так а смысла в указателе в никуда не больше, чем нулевого указателя. Или я не так что понял?
     
  10. ИгорьК

    ИгорьК Гуру

    Наблюдая за этой темой, мучаюсь вопросом: предмет спора отражает глубокий профессионализм участников, или что-то другое.
    Из давно прочитанной книжки помнится простое правило: что-то объявил - заполни чем надо.

    Безусловно, дальше эту ситуацию можно раскатывать на молекулы и говорить много слов.

    Однако указанное выше немудреное правило за(по)крывает все варианты, кажется.

    Война остроконечников и тупоконечников, или высоты проффессионализма?
    (Водовка выпита, полезли вопросы...)
     
    Последнее редактирование: 17 ноя 2018
    DetSimen нравится это.
  11. ИгорьК

    ИгорьК Гуру

    Лукас Ф Коста: «JavaScript-усталость — это то, что можно наблюдать тогда, когда люди используют инструменты, которые им не нужны, для решения проблем, которых у них нет».

    А в Си такое бывает?
     
  12. DIYMan

    DIYMan Гуру

    Каждый божий день :D
     
  13. Asper Daffy

    Asper Daffy Иксперд

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

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

    Код (C++):
    #include "stdafx.h"

    void main(void) {
       int * n1 = new int;
       int * n2 = new int();
       int * n3 = new int(123);
       int * n4 = new int(321);
       int * n5 = new int(0);
       printf("*n1=%d *n2=%d *n3=%d *n4=%d *n5=%d\n", *n1, *n2, *n3, *n4, *n5 );
    }
    // Результат
    // *n1=5308612 *n2=0 *n3=123 *n4=321 *n5=0
    т.е. всё в точности,как я писал *n1 - неициализирована.

    А вот такой же код в GCC (в Ардуино) даёт такой результат
    Код (C++):
    #include <Printing.h>

    void setup(void) {
        Serial.begin(115200);
        char *s = new char [30];
        strcpy(s, "12345678901234567890");// загадим кучу!
        delete [] s;
        int * n1 = new int;
        int * n2 = new int();
        int * n3 = new int(123);
        int * n4 = new int(321);
        int * n5 = new int(0);
        printf("*n1=%d *n2=%d *n3=%d *n4=%d *n5=%d\n", *n1, *n2, *n3, *n4, *n5 );
    }

    void loop(void) {}
    //
    // Результат
    // *n1=0 *n2=0 *n3=123 *n4=321 *n5=0
    Т.е. *n1 инициализирована нулём,хотя я специально загадил кучу!

    Это не противоречит стандарту, там не говорится, что именно должно быть в неинициалированной области.

    Только, мужики,я уже писал и пишу ещё раз - баловство всё это. Лучше явно прописывать инициализацию. Так не ошибётесь. А то с памятью там столько тонкостей, можно на такие грабли налететь.
     
    Последнее редактирование: 17 ноя 2018
    DIYMan нравится это.
  14. Asper Daffy

    Asper Daffy Иксперд

    Эстетство. Пятница. Хочется поговорить о чём-то высоком, неприземлённом :)
     
  15. DetSimen

    DetSimen Спамовредитель Модератор

    Дак а я прашто? С++ со всеми своими стандартами - это напрочь усеянное граблями поле, на которое запускают нас, необученных смертничков, с завязанными глазами.
     
    Последнее редактирование: 17 ноя 2018
  16. DetSimen

    DetSimen Спамовредитель Модератор

    Ну я вот не профессионал, а всегда говорю "Инициализируй ЭТО явно, бро" и не получишь топором, привязанным к граблям в лоп.
    Госспади, опять все выходные гудеть голове, и болеть глазам...
     
  17. parovoZZ

    parovoZZ Гуру

    Стапэ. Мы берем МК. В МК память забита единицами. Мы говорим - нам нужен указатель. Указатель это что? В этой ячейке лежит адрес другой ячейки. Компилятор нам выделяет память под наш указатель. Что в нем будет, если ничего не инициализировать? Единицы. То бишь указатель указывает на ячейку с адресом F или FF. А если мы проинициализируем нулями? Там будет нулевой адрес. Честно - я не вижу смысла ни в первом случае, ни во втором.
     
  18. DetSimen

    DetSimen Спамовредитель Модератор

    неверное утверждение. Единицами забита стёртая EEPROM, а в ОЗУ после включения лежит случайный мусор
     
  19. Asper Daffy

    Asper Daffy Иксперд

    Вот в этом месте семантическая ошибка. А дальше на неё как снежный ком накручивается. Когда мы пишем

    new int

    мы НЕ говорим "нам нужен указатель". Мы говорим "нам нужен объект типа int". Именно объект, а не указатель..

    то что результатом new будет указатель на этот самый объект, а не что-то другое, то, что для этого придётся выделять память - это всё детали. Мы говорим "дай нам объект типа int". И именно этот объект инициализируется. А указатель - в нём адрес создаваемого объекта, и мы не управляем его инициализацией от слова никак - его инициализируют адресом объекта без нас.
     
    Последнее редактирование: 17 ноя 2018
  20. parovoZZ

    parovoZZ Гуру

    ой ли? Все сброшено.

    ну а в памяти МК это как отразится?