Функция с параметром по умолчанию
- Войдите на сайт для отправки комментариев
Пнд, 23/11/2020 - 16:47
Добрый день!
Подскажите, можно ли реализовать функцию с параметром по умолчанию, который не обязательно передавать в функцию?
Сейчас есть такая функция для счётчика - передаю текущее значение и максимальное. Функция "щёлкает" до максимума, а потом начинает с нуля:
uint8_t nextCount(uint8_t Count, uint8_t MaxCount) { Count++; if (Count > MaxCount) Count = 0; return Count; } //пример вызова if (RightButton) Count = nextCount(Count, MaxCount);
Хочу добавить возможность передачи параметра - по сколько "щёлкать". ЧТобы в некоторых случаях можно было бы прибавлять по 3, 5, 10, 42...
При этом оставить текущее использование по умолчанию. То есть, при вызове nextCount с двумя параметрами - щёлкать по единичке. При вызове с тремя параметрами - прибавлять третий параметр.
Заранее спасибо!
а чего бы не набрать это самое в гугле? - "функция с параметров по умолчанию в Си"
а если включить в тело функции:
Оказалось всё ещё проще )))
а чего бы не набрать это самое в гугле? - "функция с параметров по умолчанию в Си"
https://www.youtube.com/watch?v=aw10753OJyg
а чего бы не набрать это самое в гугле? - "функция с параметров по умолчанию в Си"
Не хватает понимания отличий С, С++ и ObjC :) Это же ветка для новичков.
Гугл пишет, что в С++ можно, в С и ObjC нельзя. При этом часто упоминаются ещё и разные компиляторы. Для ардуино же используется собственный компилятор, поэтому и решил спросить, точно ли нельзя? :) Поэтому и формулировка вопроса "... можно ли...?".
а чего бы не набрать это самое в гугле? - "функция с параметров по умолчанию в Си"
https://www.youtube.com/watch?v=aw10753OJyg
как же тут не есть, после шести )))
https://youtu.be/Hexja4WoJ1s
а если включить в тело функции:
Оказалось всё ещё проще )))
Как переделать, используя третий аргумент функции - понятно. Просто не красиво почти везде вызывать эту функцию с передачей единички, чтобы в одном месте вызвать с другим значением.
uint8_t nextCount(uint8_t Count, uint8_t MaxCount, uint8_t defCount = 1)
При вызове с двумя параметрами defCount будет иметь значение 1, при вызове с тремя - указанное в вызове значение.
uint8_t nextCount(uint8_t Count, uint8_t MaxCount, uint8_t defCount = 1)
При вызове с двумя параметрами defCount будет иметь значение 1, при вызове с тремя - указанное в вызове значение.
Спасибо большое, попробую!
v258, таки избавили лодыря от необходимости запрос в гугле набрать :-)
v258, таки избавили лодыря от необходимости запрос в гугле набрать :-)
Почему лодыря? Гугл 80% ответов ведёт на С++. Я не знаю, насколько советы по С++ применительны к ардуино.
Ещё введёт на вот такую вот ветку: https://ru.stackoverflow.com/questions/21128
Где чёткие ответы: "Нельзя.", "Вообще то дело не в коде, эта фича делается на этапе компиляции.", "во всех компиляторах, что есть у меня выдают ошибку. Единственный компилятор, что не не дал ошибку - это LC (он же LCC). Программа отработала верно при этом.".
И прочие ответы из серии "на ObjC нельзя, можно на C++" и тд. Многие описания функций С (в тч на этом сайте) даже примерно не упоминают о такой возможности.
И как эти ответы отнести к ардуино я не знаю.
По всем этим причинам формулировка вопроса была не "напишите как", а "можно ли?"
У Ардуино нет своего языка и компилятора. Присмотритесь - там GCC.
v258, таки избавили лодыря от необходимости запрос в гугле набрать :-)
Это я сегодня после ночной, невыспатый )))
Почему лодыря? Гугл 80% ответов ведёт на С++. Я не знаю, насколько советы по С++ применительны к ардуино.
На этом сайте, раздел Программирование, первый же абзац
Волшебное слово "пожалуй". Как много можно за ним скрыть. Наша фирма, пожалуй, лучший в мире поставщик... Вот кажется и не обманул. Даже если не лучшая, то пожалуй всё скрасит. Так с компилятором. Самый обычный GCC с дописанными процедурами вдруг стал языком ардуино.
Почему лодыря?
Ну, откуда мне знать, почему Вы лодырь? Может воспитание такое, может ещё чего.
Гугл 80% ответов ведёт на С++.
А на каком языке по-Вашему в Ардуино IDE люди программируют?
Я не знаю, насколько советы по С++ применительны к ардуино.
Потому и не знаете, что лодырь - лень читать и учиться
Потому и не знаете, что лодырь - лень читать и учиться
а мне было не лень, увидев пос b707 залез и прочитал, а ведь когда-то ранее читал жеж, но так как надобности не было, забыл, поэтому и пост #2 дополнил )))