Процедура/функция которая записывает значения в параметры
- Войдите на сайт для отправки комментариев
Втр, 06/10/2020 - 12:16
Добрый день!
Подскажите пожалуйста, что-то торможу: как сделать процедуру/функцию которая записывала бы значения в свои параметры?
ну например:
void timer(int a, int b) { a = millis(); b = micros(); } void setup() { Serial.begin(9600); } void loop() { int ms,mics; timer(ms,mics); Serial.println(ms,DEC); Serial.println(mics,DEC); delay(1000); }
как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?
void timer(int& a, int& b) { ... }
Добрый день!
Подскажите пожалуйста, что-то торможу: как сделать процедуру/функцию которая записывала бы значения в свои параметры?
ну например:
как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?
void timer(int& a, int& b) { ... }
Так правильно.
Так тоже можно, но хуже.
Так тоже можно, но хуже.
Чем?
как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?
В общем случае - никак. Эти значения туда не поместятся.
В общем случае - никак. Эти значения туда не поместятся.
скорее в данном конкретном случае у ТС - не поместятся, а "в общем случае" - вполне решаемо :)
Так тоже можно, но хуже.
Чем?
Поймает меньше ошибок на этапе компиляции
скорее в данном конкретном случае у ТС - не поместятся, а "в общем случае" - вполне решаемо :)
Вы не поняли к чему относилось слово "общий".
У ТС было
int
ms,mics;
Так вот, иногда (в частных случаях) это сработает, а в общем случае такие значения в такие переменные не пихаются.
Если запихнуть в unsigned int вместо unsigned long и везде использовать unsigned int и при этом укладываться в урезанный максимальный интервал (65536 ms/us), то разницы не будет никакой.
Если запихнуть в unsigned int вместо unsigned long и везде использовать unsigned int и при этом укладываться в урезанный максимальный интервал (65536 ms/us), то разницы не будет никакой.
Ещё как будет , при измерении отрезков более 65,5секунд в частности
как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?
В общем случае - никак. Эти значения туда не поместятся.
А подскажите ка мне сударь, это в принципе с точки синтаксиса языка правильно,
что функция не возвращающая значения их возвращает, через костыли но...
На асме я тоже делал, всё что заблагорассудится, но это всё таки C...
По сути то ведь говнокод получается?
По сути то ведь говнокод получается?
Нет, это штатный механизм, пошедший еще с какой-то из распоследних версий Фортрана, там были in параметры и out параметры. Применялось это как раз там, где функция должна возвращать более одного значения
как сделать чтоб в ms записывалось значение millis, а в mics соответственно micros?
В общем случае - никак. Эти значения туда не поместятся.
А подскажите ка мне сударь, это в принципе с точки синтаксиса языка правильно,
что функция не возвращающая значения их возвращает, через костыли но...
На асме я тоже делал, всё что заблагорассудится, но это всё таки C...
По сути то ведь говнокод получается?
При большом желании написать кошерный код, можно объявить структуру с этими двумя переменными и возвращать функцией структуру.
Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.
Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.
кем используется, на каком основании, как на это смотрит Керниган и Риччи )))
по сути ведь костыль?
по сути ведь костыль?
нет
Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.
кем используется, на каком основании, как на это смотрит Керниган и Риччи )))
по сути ведь костыль?
Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)
Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.
кем используется, на каком основании, как на это смотрит Керниган и Риччи )))
по сути ведь костыль?
Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)
Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)
Вопрос тут в том, имеет ли смысл выделять новую память под массив-результат, если он все равно будет записан в изначальную область.
Так, как описано выше с заполнением переменных по ссылкам - постоянно используется в программах на Си.
кем используется, на каком основании, как на это смотрит Керниган и Риччи )))
по сути ведь костыль?
Ок. Вам задача: написать функцию сортировки большого массива. Может тогда отпадет вопрос)
каким из семи алгоритмов, что я знаю, можно воспользоваться?
каким из семи алгоритмов, что я знаю, можно воспользоваться?
Не важно. Мне интересно, каким способом Вы результат возвращать будете.
как на это смотрит Керниган и Риччи )))
Никак не смотрит. В языке Си этого нет в принципе.
У нас преподаватель был "счетовод" - в том смысле, что он много программировал расчётных задач, но язык знал слабенько (как и большинство тех, кто программирует расчётные задачи), уж как я его этой особенностью троллил - напишу, сдаю, вроде результат нормальный выводится, но в тексте ... типа печать пятёрки, а на листинге - та самая 12. Он мне: "ты мне левый листинг подсовываешь". А я такой - ни фига, вот мои перфокарты, запустите сами ... запускает, долго чешет репу, бормоча про себя "так не бывает" ... в общем, нефиг было в деканат стучать, что я пару пар прогулял :-)
Мне с преподавателем повезло, он сразу сказал: Фортран устарел, будущее за Паскалем (чтоб ему, не мог сразу на С показать?)! А в остальном один в один: он тоже не очень понимал, что мы ему писали, что не мешало ему писать докторскую на наших материалах:)
И таки да, мы явно были моложе, потому что листинг давали на распечатках, а программы на перфолентах уже... Перфокарты считали за седую древность)
" ... в общем, нефиг было в деканат стучать, что я пару пар прогулял :-)
О!!! Троллинг не вчера придумали )))
каким из семи алгоритмов, что я знаю, можно воспользоваться?
Не важно. Мне интересно, каким способом Вы результат возвращать будете.
обычно, как берут так и возвращают
Не придирайтесь к словам - ссылка, указатель, адрес - суть та, что меняется значение по адресу.
Да, прямо ретурном можно вернуть структуру.
Да, прямо ретурном можно вернуть структуру.
взял попкорн, сел поудобнее перед монитором...
Не придирайтесь к словам - ссылка, указатель, адрес
Ладно, не буду. Если Вам нет разницы, то и ладно, хай так будет.
Да, прямо ретурном можно вернуть структуру.
Да, можно-то можно, только я же сказал, у нас о кошерности, похоже, разные представления :-(
Сложно судить 30 лет спустя, но судя по тому, что процесс обучения выглядел "вот литература, читайте, учитесь, принесете мне готовые работы на сдачу" - то вполне возможно. С другой стороны, я понятия не имею, как он учил рядового студента, с середины первого курса на общем уроке информатики не бывал ни разу.
А с третьей стороны, рядового студента тогда учили Бейсику, никаких фортранов и паскалей (знаю, потому что делал программы на курсачи практически за всех знакомых ледей).
Не придирайтесь к словам - ссылка, указатель, адрес
Ладно, не буду. Если Вам нет разницы, то и ладно, хай так будет.
Почитал, понял тонкое отличие, буду знать.