Как передать объект в тело функции?

paramen
Offline
Зарегистрирован: 17.03.2020
Исходный код у меня такой...
 
#include <ModbusRtu.h>
#include <OneWire.h>
 
 
#define DS18B20_1_Pin  A2     // DS18B20 к пину
 
OneWire ds(DS18B20_1_Pin);  // создаем объект OneWire(номер порта)
 
 
//*********************************************************
// Функция начальной конфигурации датчика
//*********************************************************
void setConfig() {
 
  ds.reset();       // команда "сброс"
  ds.skip();        // команда "пропустить ROM"
  ds.write(0x4E);   // команда "заисать в память"
 
  ds.write(0x55);   // записываем TH
  ds.write(0x05);   // записываем TL
  ds.write(0x1F);   // записываем "разрядность 9 бит"
 
  ds.reset();       // команда "сброс"
  
}
 
Вопрос: Как передать в функцию setConfig()  созданный мной объект ds, либо другой объект, что бы использовать одну и ту же функцию для разных объектов.
 
rkit
Offline
Зарегистрирован: 23.11.2016

setConfig(OneWire & ds)

Чаще всего объекты следует передавать ссылкой (&)

paramen
Offline
Зарегистрирован: 17.03.2020

А внутри самой функции как использовать?

например для

ds.reset();       // команда "сброс"

rkit
Offline
Зарегистрирован: 23.11.2016

так же

b707
Offline
Зарегистрирован: 26.05.2017

rkit пишет:

setConfig(OneWire & ds)

Чаще всего объекты следует передавать ссылкой (&)

а указателем чем хуже?

setConfig(OneWire* ds)

 

rkit
Offline
Зарегистрирован: 23.11.2016

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

paramen
Offline
Зарегистрирован: 17.03.2020
 
 
 
#define DS18B20_1_Pin  A2            // DS18B20 к пину
#define DS18B20_2_Pin  A3            // DS18B20 к пину

OneWire ds_sensor_1(DS18B20_1_Pin);  // создаем объект OneWire(номер порта)
OneWire ds_sensor_2(DS18B20_2_Pin);  // создаем объект OneWire(номер порта)


//*********************************************************
// Начальная настройка
//*********************************************************
void setup() {

  setConfig(ds_sensor_1);     // настраиваем разрядность датчика
  setConfig(ds_sensor_2);     // настраиваем разрядность датчика
  
}

//*********************************************************
// Главный цикл
//*********************************************************
void loop() {
    
}


//*********************************************************
// Функция начальной конфигурации датчика
//*********************************************************
void setConfig(OneWire& object) {

  object.reset();       // команда "сброс"
  object.skip();        // команда "пропустить ROM"
  object.write(0x4E);   // команда "записать в память"

  object.write(0x55);   // записываем TH
  object.write(0x05);   // записываем TL
  object.write(0x1F);   // записываем "разрядность 9 бит"

  object.reset();       // команда "сброс"
  
}

 

 

b707
Offline
Зарегистрирован: 26.05.2017

paramen - вместо того что выкладывать сюда самочевидный код, лучше бы правила форума почитали

paramen
Offline
Зарегистрирован: 17.03.2020

Для Вас это - "самочевидный код". Для меня это серьезный шаг в программировании. Мы с Вами наверно на "разных берегах", берите пример с rkit.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Дополню: правила хорошего тона требуют квалификатор const, когда переданный объект внутри функции - не изменяется:

void setConfig(const OneWire& object) {

Также - лучше не использовать имён object и т.п. - вполне возможно, в будущем вылезет боком: захочет комитет по С++ ввести такое ключевое слово - и амба. Да и во многих ЯП object - ключевое слово, поэтому - лучше ниннада, переносимость алгоритмов только повысится.

rkit
Offline
Зарегистрирован: 23.11.2016

Правила хорошего тона говорят, что нужно понимать, о чем пишешь, а не выдумывать, что объект не изменяется, когда он явно изменяется.

sadman41
Offline
Зарегистрирован: 19.10.2016

Просто интересно - в каком месте данного кода "object" изменяется?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

rkit пишет:

Правила хорошего тона говорят, что нужно понимать, о чем пишешь, а не выдумывать, что объект не изменяется, когда он явно изменяется.

Очередной высер от недоучки. Покажи, где изменяется объект? Пёрнул в лужу, как обычно.

rkit
Offline
Зарегистрирован: 23.11.2016

sadman41 пишет:
Просто интересно - в каком месте данного кода "object" изменяется?

Буквально в каждой строчке. Посмотри в исходники методов. Да даже не надо ничего знать о классе и исходниках, достаточно посмотреть на то, что есть методы, которые ничего не возвращают и не принимают. Они методом исключения что-то изменяют.

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

И прежде чем баба завопит еще, добавлю, что среда arduino компилирует с -fpermissive, делая этот квалификатор бесполезным.

sadman41
Offline
Зарегистрирован: 19.10.2016

Да я посмотрел ещё до вопроса - reset(), skip(), write() не изменяют приватных/публичных переменных класса, используя локальные переменные функций и делая bit-banging ногой шины. Поэтому и поинтересовался - что в конкретном примере препятствует использованию const.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

rkit, ты спицально уйню несешь? 

rkit
Offline
Зарегистрирован: 23.11.2016

Ни одна из них не объявлена как const.

sadman41
Offline
Зарегистрирован: 19.10.2016

Вобщем, тут каким-то холиваром запахло.

rkit
Offline
Зарегистрирован: 23.11.2016

DetSimen пишет:

rkit, ты спицально уйню несешь? 

Возьми нормальный компилятор (не arduino), и ты увидишь, что код с const вообще не компилируется. На этом разговор считаю закрытым.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Согласен.  Я х-ню несу.  Константный модификатор игнорируется при изменении объекта по ссылке. 

передал String по ссылке   (const String &s)

In function void AddString(const String&)
50:7: warning: passing 'const String' as 'this' argument discards qualifiers [-fpermissive]
   s += 1

Приношу извинения за напраслину, безграмотный здесь я. :) 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

rkit пишет:

Ни одна из них не объявлена как const.

Потому что писали такие же недоучки, как ты. На деле же, объект в примере - нигде не изменяется. Но тебе же лень исходники глянуть, главное - погромче пёрнуть, пообзывать всех бабами, дырочка ты наша.

Ещё раз повторюсь: пёрнул - хоть руками помаши.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

Согласен.  Я х-ню несу.  Константный модификатор игнорируется при изменении объекта по ссылке. 

передал String по ссылке   (const String &s)

In function void AddString(const String&)
50:7: warning: passing 'const String' as 'this' argument discards qualifiers [-fpermissive]
   s += 1

Приношу извинения за напраслину, безграмотный здесь я. :) 

Деда, тут нет ничего необычного. Просто ты видишь warning, и это - правильно. Когда тебе предоставляют метод, принимающий некий объект по ссылке, с квалификатором const - ты уже на этом уровне будешь уверен, что состояние объекта останется неизменным после отработки тела функции. Ну а далее - уже правильная реализацию const-методов класса, например. В твоём случае - настройки компилятора позволяют делать то, что ты сделал, но выдают warning. Уберёшь const - не будет warning. Уберёшь -fpermissive - не скомпилируется.

Но введение const, вне зависимости от настроек компилятора - это достаточно простой шаг для автодокументирования кода (скажем так, безграмотно). Конечно, это не отменяет юнит-тестов, например, но - помогает.

Многие, очень многие классы в Arduino написаны не очень. Поэтому авторы IDE тупо включили -fpermissive, чтобы оно всё хоть как-то компилировалось.

Но ещё раз повторюсь: если объект, переданный по ссылке, не изменяется в методе, то хорошим тоном является использование квалификатора const, явным образом сообщающим об этом. "Является хорошим тоном" != "обязательно использовать", конечно. Всё остальное, включая const-методы объекта - это уже архитектурный слой.

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

rkit пишет:

DetSimen пишет:

rkit, ты спицально уйню несешь? 

Возьми нормальный компилятор (не arduino), и ты увидишь, что код с const вообще не компилируется. На этом разговор считаю закрытым.

А с каких это пор GCC перестал быть нормальным компилятором? Просто потому, что Arduino IDE вызывает его с некими настройками?

rkit, ты жутко напоминаешь Великого - как сказанёшь мощно - аж внушаить...

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

rkit пишет:

есть методы, которые ничего не возвращают и не принимают. Они методом исключения что-то изменяют.

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

Ключевое тут, считаю - "что-то". Конкретно вот - что-то таки изменяют, и пошли вы все нахер, руки прочь от Великого (ну он это, он).

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Обьект с модификатором const можно передавать, только если используются его функции с явным модификатором const. Иначе, моветон и костыли, неизвестно как проявящиеся в будущем. 

Поэтому, в данном конкретном случае, я признаю свою безграмотность перед rkit. У меня все в данной теме. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

У меня все в данной теме. 

У меня - тоже. В первоначальном примере - объект не изменяется, в твоём - изменяется. Используемые методы объекта в первом примере - нужно определить как const, для полного феншуя, т.к. они ничего не изменяют в состоянии объекта.

Использовать квалификатор const - естественно, надо с умом, именно поэтому я и написал "хорошим тоном" (что влечёт за собой кучу условностей, по определению, включая архитектурный слой).

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Он не компилятор обвинял, а IDE, по умолчанию скрывающую warning-и

P.S. Мне не нравится его апломб и манеры общения, но если он прав, я это признаЮ.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

я признаю свою безграмотность 

Во-первых, не прибедняйся ;) Во-вторых, смотри, для чего вся эта чухня с квалификатором const. Допустим, у класса OneWire есть метод setPin(uint8_t pin) - который меняет линию, с которой работает объект. Создал ты такой объект OneWire, передал ему в конструктор пин номер 2. Затем - передал этот объект по ссылке в метод, написанный сторонним разработчиком. Передача по ссылке - без квалификатора const.

И такой внезапно по выходе из метода обнаруживаешь, что показания датчиков (например, DS18B20) пропали. А всё потому, что внутри функции сторонний разработчик позвал setPin с пином номер 3, вот так ему захотелось, по каким-то моральным соображениям. А если у тебя нет доступа к исходному коду Васи (например, это вызов Васей какого-нибудь API, которое ты ему предоставляешь)? Твоя задача в этом случае - обезопасить себя (на Васю - похер, он сам себе rkit), и быть уверенным, что состояние объекта останется неизменным после того, как он будет передан в функцию. Чисто прикладное применение, не более того.  

Если же всё спроектировано правильно, то введением квалификатора const ты добьёшься того, что при попытке вызвать метод setPin для объекта, переданного в функцию, абстрактный сторонний Вася - получит по рукам от компилятора. Повторюсь: под "спроектировано правильно" имеется в виду полный набор, включая как архитектуру, так и настройки компилятора, и пр. средства.

Кстати про архитектурные косяки - в OneWire есть метод begin, который никто не помешает позвать унутре функции (если const не применять). Как раз случай, когда надо чуть-чуть постараться, и сделать так, чтобы были нормальные прототипы методов, с const, где это необходимо.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

Он не компилятор обвинял, а IDE, по умолчанию скрывающую warning-и

P.S. Мне не нравится его апломб и манеры общения, но если он прав, я это признаЮ.

А вот это - хер собачий? Цитата: "Возьми нормальный компилятор (не arduino)". Где там что-то про IDE? Вижу там - про ненормальный компилятор, который используется - GCC. Собственно, Q.E.D.

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

rkit пишет:
среда arduino компилирует с -fpermissive

Вот лог компиляции среды "из коробки". Где указан этот параметр? Покажите.

C:\Arduino\arduino-1.8.10\arduino-builder -dump-prefs -logger=machine -hardware C:\Arduino\arduino-1.8.10\hardware -hardware C:\Users\Admin\AppData\Local\Arduino15\packages -tools C:\Arduino\arduino-1.8.10\tools-builder -tools C:\Arduino\arduino-1.8.10\hardware\tools\avr -tools C:\Users\Admin\AppData\Local\Arduino15\packages -built-in-libraries C:\Arduino\arduino-1.8.10\libraries -libraries C:\Users\Admin\Google Диск\Soft\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10810 -build-path C:\Arduino\build -warnings=all -build-cache C:\Users\Admin\AppData\Local\Temp\arduino_cache_102270 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -verbose C:\Users\Admin\Google Диск\Электроника\Схемы\Proteus\Arduino\kaka\kaka.ino
C:\Arduino\arduino-1.8.10\arduino-builder -compile -logger=machine -hardware C:\Arduino\arduino-1.8.10\hardware -hardware C:\Users\Admin\AppData\Local\Arduino15\packages -tools C:\Arduino\arduino-1.8.10\tools-builder -tools C:\Arduino\arduino-1.8.10\hardware\tools\avr -tools C:\Users\Admin\AppData\Local\Arduino15\packages -built-in-libraries C:\Arduino\arduino-1.8.10\libraries -libraries C:\Users\Admin\Google Диск\Soft\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10810 -build-path C:\Arduino\build -warnings=all -build-cache C:\Users\Admin\AppData\Local\Temp\arduino_cache_102270 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Arduino\arduino-1.8.10\hardware\tools\avr -verbose C:\Users\Admin\Google Диск\Электроника\Схемы\Proteus\Arduino\kaka\kaka.ino
Using board 'nano' from platform in folder: C:\Arduino\arduino-1.8.10\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Arduino\arduino-1.8.10\hardware\arduino\avr
Detecting libraries used...
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\build\\sketch\\kaka.ino.cpp" -o nul
Alternatives for ConstTimers.h: [ConstTimers]
ResolveLibrary(ConstTimers.h)
  -> candidates: [ConstTimers]
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\Admin\\Google Диск\\Soft\\libraries\\ConstTimers" "C:\\Arduino\\build\\sketch\\kaka.ino.cpp" -o nul
Generating function prototypes...
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\Admin\\Google Диск\\Soft\\libraries\\ConstTimers" "C:\\Arduino\\build\\sketch\\kaka.ino.cpp" -o "C:\\Arduino\\build\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"C:\\Arduino\\arduino-1.8.10\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Arduino\\build\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Компиляция скетча...
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "-IC:\\Users\\Admin\\Google Диск\\Soft\\libraries\\ConstTimers" "C:\\Arduino\\build\\sketch\\kaka.ino.cpp" -o "C:\\Arduino\\build\\sketch\\kaka.ino.cpp.o"
Compiling libraries...
Compiling library "ConstTimers"
Compiling core...
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -x assembler-with-cpp -flto -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\wiring_pulse.S" -o "C:\\Arduino\\build\\core\\wiring_pulse.S.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\wiring_analog.c" -o "C:\\Arduino\\build\\core\\wiring_analog.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\WInterrupts.c" -o "C:\\Arduino\\build\\core\\WInterrupts.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\hooks.c" -o "C:\\Arduino\\build\\core\\hooks.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\wiring.c" -o "C:\\Arduino\\build\\core\\wiring.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\wiring_digital.c" -o "C:\\Arduino\\build\\core\\wiring_digital.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\wiring_pulse.c" -o "C:\\Arduino\\build\\core\\wiring_pulse.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -c -g -Os -Wall -Wextra -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\wiring_shift.c" -o "C:\\Arduino\\build\\core\\wiring_shift.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\HardwareSerial1.cpp" -o "C:\\Arduino\\build\\core\\HardwareSerial1.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\HardwareSerial0.cpp" -o "C:\\Arduino\\build\\core\\HardwareSerial0.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\HardwareSerial.cpp" -o "C:\\Arduino\\build\\core\\HardwareSerial.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\CDC.cpp" -o "C:\\Arduino\\build\\core\\CDC.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\HardwareSerial2.cpp" -o "C:\\Arduino\\build\\core\\HardwareSerial2.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\HardwareSerial3.cpp" -o "C:\\Arduino\\build\\core\\HardwareSerial3.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\IPAddress.cpp" -o "C:\\Arduino\\build\\core\\IPAddress.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\PluggableUSB.cpp" -o "C:\\Arduino\\build\\core\\PluggableUSB.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\Print.cpp" -o "C:\\Arduino\\build\\core\\Print.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\Stream.cpp" -o "C:\\Arduino\\build\\core\\Stream.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\Tone.cpp" -o "C:\\Arduino\\build\\core\\Tone.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\USBCore.cpp" -o "C:\\Arduino\\build\\core\\USBCore.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\WMath.cpp" -o "C:\\Arduino\\build\\core\\WMath.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\WString.cpp" -o "C:\\Arduino\\build\\core\\WString.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\abi.cpp" -o "C:\\Arduino\\build\\core\\abi.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\main.cpp" -o "C:\\Arduino\\build\\core\\main.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\eightanaloginputs" "C:\\Arduino\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino\\new.cpp" -o "C:\\Arduino\\build\\core\\new.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\wiring_pulse.S.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\WInterrupts.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\hooks.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\wiring.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\wiring_analog.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\wiring_digital.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\wiring_pulse.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\wiring_shift.c.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\CDC.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\HardwareSerial.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\HardwareSerial0.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\HardwareSerial1.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\HardwareSerial2.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\HardwareSerial3.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\IPAddress.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\PluggableUSB.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\Print.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\Stream.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\Tone.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\USBCore.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\WMath.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\WString.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\abi.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\main.cpp.o"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc-ar" rcs "C:\\Arduino\\build\\core\\core.a" "C:\\Arduino\\build\\core\\new.cpp.o"
Архивирование откомпилированного ядра (кэширование) в: C:\Users\Admin\AppData\Local\Temp\arduino_cache_102270\core\core_arduino_avr_nano_cpu_atmega328_cca835c6296db4eb3f4b5500ec929c80.a
Linking everything together...
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -Wall -Wextra -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Arduino\\build/kaka.ino.elf" "C:\\Arduino\\build\\sketch\\kaka.ino.cpp.o" "C:\\Arduino\\build/core\\core.a" "-LC:\\Arduino\\build" -lm
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Arduino\\build/kaka.ino.elf" "C:\\Arduino\\build/kaka.ino.eep"
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Arduino\\build/kaka.ino.elf" "C:\\Arduino\\build/kaka.ino.hex"
Несколько библиотек найдено для "ConstTimers.h"
 Используется: C:\Users\Admin\Google
Используем библиотеку ConstTimers в папке: C:\Users\Admin\Google Диск\Soft\libraries\ConstTimers
"C:\\Arduino\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-size" -A "C:\\Arduino\\build/kaka.ino.elf"
Скетч использует 918 байт (2%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.

rkit пишет:
среда arduino компилирует с -fpermissive, делая этот квалификатор бесполезным.

Можете пояснить каким именно образом использование "-fpermissive", даже если бы он и использовался, делает бесполезным квалификатор const?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

6-я строка первого листинга :-)  и далее по тексту, там много

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Этот permissive отменяет модификатор const у обьекта, переданного по ссылке, если внутри функции используются методы этого обьекта без спецификатора const. Независимо от того, изменяются ли на самом деле поля обьекта. 

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

DetSimen пишет:

6-я строка первого листинга :-)  и далее по тексту, там много

Ой, и правда, а чё эт я поиском-то не нашел? Старею :-(

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

DetSimen пишет:

Этот permissive отменяет модификатор const у обьекта, переданного по ссылке, если внутри функции используются методы этого обьекта без спецификатора const. Независимо от того, изменяются ли на самом деле поля обьекта. 

А вот хренушки! Это-то я как раз знаю, что он делает. Он, на самом деле

-fpermissive
Downgrade some diagnostics about nonconformant code from errors to warnings.
Thus, using ‘-fpermissive’ allows some nonconforming code to compile.

Т.е. ничего он не отменяет, просто в некоторых местах заменяет error на warning.

А const как был const'ом, так и остаётся.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

#19.   Не остается.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Нада напица. Всем пока.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

ЕвгенийП пишет:

Т.е. ничего он не отменяет, просто в некоторых местах заменяет error на warning.

Всё для удобства пользования. Ещё и warning все по умолчанию скрыты ;) Норм, чо. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

#19.   Не остается.

Деда, остаётся. В коде. Но при -fpermissive - игнорируется, давая возможность коду - скомпилироваться. Как по мне - жуткий костыль.

Вот смотри (мы же сейчас за чистоту рядов, т.е. кода говорим, да?) - в твоём примере ты передаёшь объект класса String по ссылке, с квалификатором const. Внутри функции - изменяешь состояние объекта, хотя тебе явно сказали - так делать нельзя. Но оно - скомпилировалось, потому что -fpermissive. Хорошо хоть, что warning дала, но и это - по умолчанию скрыто.

Искренне считаю, что отсутствие квалификаторов const там, где оно должно быть просто по определению - источник трудновыловимых ошибок в дальнейшем, даже при условии разработки в одно лицо (память - она неидеальна). Поэтому лучше свои классы проектировать так, чтобы оно компилировалось без warning, будучи переданы по ссылке с квалификатором const. И тогда будет уверенность, что и до, и после вызова функции - состояние объекта останется неизменным, если так хочется вызывающей стороне. А это, как  показывал на примере выше - иногда ооочень полезно, уверенность - лишней не бывает.

Так что не в -fpermissive дело, по гамбургскому счёту ;)

З.Ы. Я сам при проектировании - не идеален, иногда всплывают жуткие недоработки, в процессе жизни какого-нибудь проекта. Но const по ссылке, если объект должен остаться неизменным - у меня уже на автомате пишется. Как я и говорил (безграмотно, конечно, говорил) - своего рода самодокументирование кода.

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

DetSimen пишет:

#19.   Не остается.

Остаётся. Просто говорит, что игнорирует  в том плане, что "если не смогу, то плюну", но все сопутствующем оптимизации пока может - выполняет.

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

DIYMan пишет:

Всё для удобства пользования. Ещё и warning все по умолчанию скрыты ;) Норм, чо. 

Это да. За скрытые предупреждения (чтобы блондинкам голову не нагружало) иногда хочется руки поотрывать. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Дополню наглядным примером (не будем про -fpermissive и архитектуру конкретного класса). Есть прототип функции:

void parse(const String& input, const String& pattern, String& result);

Глядючи на неё, я уже по умолчанию жду, что первые два параметра - останутся в неизменном состоянии после вызова  функции, а в третий - будет помещён результат. И это - правильное объявление, т.к. с параметром pattern, например, захочется работать и дальше (например, применяем его в цикле к разным input, вызывая функцию parse).

Итог: код уже частично документировал сам себя, уже на этапе определения - от кода ждётся определённое поведение. И если какой-то ... включил -fpermissive, а конкретный Вася - решил этим воспользоваться и поменять, например, параметр pattern внутри parse - то по рукам получит именно Вася, т.к. после его изменений, во-первых, появится warning, и, во-вторых - не пройдёт юнит-тест (если они используются, конечно).

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

ЕвгенийП пишет:

DIYMan пишет:

Всё для удобства пользования. Ещё и warning все по умолчанию скрыты ;) Норм, чо. 

Это да. За скрытые предупреждения (чтобы блондинкам голову не нагружало) иногда хочется руки поотрывать. 

Маркетинг, эффективные - реалии жизни. Если бы не прятали, и убрали -fpermissive - то не было бы сообщества Arduino, всё рухнуло бы в один миг, ибо - "оно же сложно, аааа, красная строчка, ааа, не компилируется!".

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Не очень опытный пользователь спросил "Как передать объект в тело функции".

Решение было найдено быстро, и весь сыр бор разгорелся из-за

Дополню: правила хорошего тона требуют квалификатор const, когда переданный объект внутри функции - не изменяется:

Я тоже не очень опытный пользователь. Оценить с одного взгляда меняется объект или не меняется не могу. Лезть в библиотеку и смотреть как объявлены методы и что они делают??? Наверное это "правило хорошего тона" не для новичков.

sadman41
Offline
Зарегистрирован: 19.10.2016

Bruzzer пишет:

Не очень опытный пользователь спросил "Как передать объект в тело функции".

Решение было найдено быстро, и весь сыр бор разгорелся из-за

Дополню: правила хорошего тона требуют квалификатор const, когда переданный объект внутри функции - не изменяется:

Просто форум - не справочная и каждый из нас не истина в последней инстанции.

Нашёлся спорный момент и те, кому это действительно интересно, пытаются докопаться до сути вещей. Нормальная