Как прописать параметры функции по умолчанию

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

Дед, все твои методы перенести можно, но придётся объявить их inline. Просто тупо перенести, добавив слово inline  в начало. Но полностью от .cpp не избавишься, т.к. нельзя перенести ISR'ы и глобальное определение экземпляра (8-ая строка). 

astwo
Offline
Зарегистрирован: 10.07.2019

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

Ну, как, а если он нужен? Если в этом .h описан какой-нить класс, то его необходимо включать во все .cpp в которых этот класс используется. Иначе-то никак.


Если же поключаемый файл нужен везде, то его надо писать как библиотеку. Но если просто и на посмотреть то можно обойтись и одним файлом. А то так договорится можно, что нужны права на трёхколёсный велосипед, как на вождение фуры. Но похоже уже давно пошло обсуждение сферического коня в вакууме.

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

astwo пишет:
если просто и на посмотреть то можно обойтись и одним файлом.
Мне казалось, что ровно эти слова я Вам написал ещё 14 постов назад в #40. Так и не понял, что Вы мне пытались всё это время доказать.

astwo
Offline
Зарегистрирован: 10.07.2019

ЕвгенийП пишет:
Так и не понял, что Вы мне пытались всё это время доказать.

я и выше это говорил. У qwone нет библиотеки, а раз нет библиотеки, то и каких то требований к ним нет необходимости прилагать.

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

astwo пишет:
У qwone нет библиотеки
Ну, на нет и суда нет. Я ошибочно полагал, что qwonelib.h - как раз библиотека и есть, но благодаря Вашим объяснениям, я понял, что lib - это не от "library", а от "liberty" - подчёркивает, что автор свободен и пишет что хочет и как хочет. Давайте на этом и закончим.

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

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

Дед, все твои методы перенести можно, но придётся объявить их inline. Просто тупо перенести, добавив слово inline  в начало. Но полностью от .cpp не избавишься, т.к. нельзя перенести ISR'ы и глобальное определение экземпляра (8-ая строка). 

ну оть. я подозревалъ

Densl
Offline
Зарегистрирован: 28.11.2018

Заметил одну очень удобную штуку у ардуина ИДЕ. Если вам срочно нужно раскидать код по разным файлам, то просто нужно создать файл или файлы с расширением ino и перенести его туда. Ни каких #include, ничего этого не надо. Просто копипаст. Ардуина сама за вас все соединит.

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

Densl пишет:
очень удобную штуку
По мне, так крайне вредная хреновина. Типа той, что IDE сама объявления функций в начало файла пихает. Сколько уже "памагити" из-за этой фичи тут разбиралось.

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

Densl пишет:
Заметил одну очень удобную штуку у ардуина ИДЕ....

Densl - я уже вам советовал - не пользуйтесь костылями. учитесь ходить самостоятельно.

Если бы Ардуино ИДЕ вас не приучила к плохому - к тому что что функции можно раскидывать по коду как угодно, в любом порядке, не заботясь об их обьявлении - всей этой ветки бы не было...

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Densl пишет:
Заметил одну очень удобную штуку у ардуина ИДЕ. Если вам срочно нужно раскидать код по разным файлам, то просто нужно создать файл или файлы с расширением ino и перенести его туда. Ни каких #include, ничего этого не надо. Просто копипаст. Ардуина сама за вас все соединит.

срабатывает далеко не всегда )))
 

Densl
Offline
Зарегистрирован: 28.11.2018

1. Объявление функции:

// файл function.h
#pragma once

#include <Arduino.h>
#include "const.h"
void myFynction(myint param=1);

2. Определение функции:

// файл function.cpp

#include "function.h"


void myFynction(myint param)
{
 // bla bla
}

3. *.ino файл:

#include "function.h"
#include "const.h"
void setup()
{
  myFunction();
}

vid loop() {}

 

[/quote]

Если myint имеет тип enum и определяется в файле const.h, то этот пример не работает. Пишет multiple definition. Как победить?

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

Densl пишет:
определяется в файле const.h,
А показать? С религией что-то?

Densl
Offline
Зарегистрирован: 28.11.2018

//file const.h
1. enum myint{a,b,c}
Ладно, разобрался с этим. #pragma once не хватало.
Но все равно ошибок как снежный ком посыпалось в моей программе как перенес функции в cpp файл. В общем буду разбираться, спасибо.

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

а как компилятор должен разбираца, какую функцию вызывать, с пустым параметром или с параметром по умолчанию? 

int myFunc(void);

int myFunc(int param = 0);

полный ambiguous налицо
Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

DetSimen пишет:

а как компилятор должен разбираца

А интуиция и искусственный интеллект на что? ИИ вообще нашефсё - за недостатком естественного только на него и надежда.

DetSimen пишет:

полный ambiguous налицо

"На лицо" бывает "факт", а эта хреновина скорее "на рыло". Нет?

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

Ворота пишет:

DetSimen пишет:

полный ambiguous налицо

"На лицо" бывает "факт", а эта хреновина скорее "на рыло". Нет?

Наерна, да. 

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

Эта чьё, простите, "рыло" Вы тут упоминаете? Не надо мне этой хреновины!

Densl
Offline
Зарегистрирован: 28.11.2018

Я перенес свои функции в cpp файл. Если в них используются классы из библиотеки, лучше передавать их в функцию как параметр или есть ещё варианты? А то они не объявленые получаются.

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

Densl пишет:
Я перенес свои функции в cpp файл. Если в них используются классы из библиотеки, лучше передавать их в функцию как параметр или есть ещё варианты? А то они не объявленые получаются.

передавать по ссылке.

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

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

В идеале весь код должен состоять из процедур и функций длиной не более 20-50 строчек и вызываемых с 3-5 параметрами

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

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

Не надо мне этой хреновины!

Ну, тогда давайте вечерком накатим за нерушимый блок свинорылых и котомордых!

Densl
Offline
Зарегистрирован: 28.11.2018

Densl пишет:
//file const.h
1. enum myint{a,b,c}
Ладно, разобрался с этим. #pragma once не хватало.
Но все равно ошибок как снежный ком посыпалось в моей программе как перенес функции в cpp файл. В общем буду разбираться, спасибо.

В общем не понимаю, если файл const.h включён в main.ino и какой нибудь f.h то ничего не работает Если в const.h имеется хоть одна переменная, допустим int myInt =0;
Если тоже самое через define объявить то ошибок сборки нет.

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

Densl][quote=Densl пишет:
В общем не понимаю, если файл const.h включён в main.ino и какой нибудь f.h то ничего не работает Если в const.h имеется хоть одна переменная, допустим int myInt =0; Если тоже самое через define объявить то ошибок сборки нет.

а что тут непонятного? define вы можете обьявлять сколько угодно раз, а переменную в одной и той же области видимости - только однажды

Возьмите себе за правило не обьявлять переменные в .h файлах.

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

и тогда большая часть ваших проблем исчезнет сама собой.