Начал изучать подпрограммы (функции) и приехали...
- Войдите на сайт для отправки комментариев
Пнд, 21/03/2016 - 17:38
Всем, здравствуйте!
Начал изучать функции и...
В общем, не подскажете, почему не работает вот это?
int k=20; int e; int r; void setup() { } void fun(r) // функция (подпрограмма) { e=r+1; } void loop() { fun(k); }
Ругается что-то в этом роде:
error: variable or field 'fun' declared void
'fun' was not declared in this scope
fun(k);
^
exit status 1
variable or field 'fun' declared void
Замена типа функции "fun" с void на int (или любой другой) ничего не дает (мне, в принципе, нужен void). Стоит убрать аргументы (т.е. чтобы в скобках было пусто), все работает с любым типом функции.
Я, конечно понимаю, что вопрос идиотский, но что здесь не так? Никак не въеду... Подскажите новичку.
Спасибо!
void fun(int r)
Да, заработало... Но ведь я в третьей строке задал тип переменной "r". Получается, при работе с функциями тип переменной задается только таким образом?
Спасибо!
Но ведь я в третьей строке задал тип переменной "r".
То, что у Вас задано в третьей строке и параметр функции - абсолютно разные переменные. И не ожидайте, что при изменении одной поменяется и другая - они просто разные и никак друг с другом не связаны.
Кстати, а по каким источникам изучаете? Если по примерам в сети и книгам типа "ардуино для чайников" - бесполезная трата времени. Берите серьёзную книгу по языку, например. такую.
Благодарю!
По идее должно быть предупреждение компилятора о том, что переменная "r" в 3 строке нигде не используется.
А оно и есть, просто разработчики IDE по умолчанию поставили опцию "compiler.warning_level=none", чтобы "помочь начинающим", а то тех сильно болтовня компилятора смущает :))) Если заменить "none" на "all", можно узнать много интересного в т.ч. и о "стандартных" библиотеках.
Еще раз спасибо, у меня все заработало! Книгу распечатаю и буду почитать...
Если заменить "none" на "all", можно узнать много интересного в т.ч. и о "стандартных" библиотеках.
не кажется ли Вам , сэр , что это новая тема для этюда очередного ?
Если заменить "none" на "all", можно узнать много интересного в т.ч. и о "стандартных" библиотеках.
не кажется ли Вам , сэр , что это новая тема для этюда очередного ?
Ну, там не так много материала. А, главное, он не так уж и интересен. ну, понатыкали неиспользуемых параметров или там знаковые и беззнаковые переменные между собой сравнивают и что?
Я тут задолжал сообществу по памяти (обещал ведь продолжить и уж давненько не продолжаю). Вот как раз на этой неделе сделаю. Я буду в командировке, а по вечерам в гостинице делать нечерта (ну, не любитель я "пива до утра" и "платных подруг"). Возьму с собй "нанку", ноутбук всегда при мне - вот и займусь.
командировка не в Питер ли ?
Почти :) Великий Новгород.
Здравствуйте. Не подскажите, что за книгу вы предложили? У меня ссылка не открывается.
Кернигана и Ритчи
На своём четвёртом году программирования в Arduino IDE решил попробовать передавать в функцию параметры, получил ошибку, загуглил и сразу набрёл на эту ветку:)
В основном на РНР программирую и вот там такого делать не надо (объявлять в функциях тип входящих переменных).
Кстати, если брать пример, описанный в 2016-том, то обычно передавал параметры в функцию так:
и вполне себе всё устраивало.
Ужас! Особенно к вам! Относительно вашего развития.(
Спасибо за столь оптимистичную оценку моих результатов. Сам я их оцениваю еще хуже.
На самом деле, зашёл просто спасибо написать за строчку:
void fun(int r)
Методом тыка до этого было бы проблематично догадаться. А вариант, как я передаю параметры в функцию через глобальные переменные - показал постом выше. Не знаю, насколько это нормально, но вполне себе работает.
void fun(int r)
А книжку по языку Си почитать - не ваш метод?
в большинстве случаев это допустимо, хотя и криво. Код в функции должен быть изолирован от внешней программы, иначе не очень понятно, зачем эта функция вообще
Чтобы повторно код использовать. В простых реализациях бейсика тож такая фигня - подпрограмму вызвать можно, а вот передать/получить что нибудь через это нет.
Чтобы повторно код использовать
Как раз размышлял над этим философским вопросом. Зачем функции, особенно, если они не изолированы.
В своё время программировал на ZX-Spectrum, так там ни функций, ни уж тем более объявления типа переменных. Бегаешь по программе с помощью GO TO и горя не знаешь. Зачем куда-то что-то передавать если и так всё глобальное.
Зачем функции... А просто, когда нету GO TO, то ничего другого и не остаётся, чтобы выполнять участки кода в произвольном порядке.
Относительно книг, обычно ищу решение какого-то конкретного вопроса. В Ардуино это не столько с Си связано, сколько с вопросами по использованию разных модулей. Как подключить, использовать и т.д.
Мне тоже после бейсика и паскаля си показался каким-то бешеным языком. Но ниче, разобрался немного.
Согласно известной теореме https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%B1%D0%B5%D1%81%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%B1%D0%B5%D0%B7%D1%8C%D1%8F%D0%BD%D0%B0%D1%85, шанс у вас есть.
И это правильно! :-)
А на каком, простите, языке Вы сейчас пишете, что там goto нет?
Очевидно на русском :-)
Картинка из оф.мануала, между прочим:
https://www.php.net/manual/en/control-structures.goto.php
"... Если в течение продолжительного времени случайным образом стучать по клавиатуре, то среди набираемого текста будут возникать осмысленные слова, словосочетания и даже предложения".
Хорошая теорема, но мне обычно нужно или на сегодня или на вчера. В крайних случаях на завтра. В таких условиях, обычно, ничего нового не изучается и лепится из того, что знакомо. Но знаете, с практической точки зрения, такой подход очень эффективен.
А относительно языков программирования, всю аппаратную часть (ESP32, ESP8266, Atmega328, STM32f103) настраиваю через так называемый Wiring (Arduino IDE), серверная часть - PHP. Мобильные приложения конвертирую через JavaScript + PhoneGap. Для обработки больших массивов использую Excel и встроенный Visual Basic. Пару раз помогали студенты программисты, но они все, как один, хотят NodeJS (видать, в ВУЗах это сейчас ходовое).
P.S. Я вообще просто зашел написать спасибо, что тут отвечают на такие нубские вопросы вида "как вызвать функцию с параметрами". У меня лично больше вопросов нет. Всё работает, всем доволен.
не обманывайте себя. Таким подходом ничего. кроме костылей. примотанных изолентой - создать не получится... и называть такой подход "эффективным" - ну это себя не уважать.
И... если ситуация "решение нужно вчера" возникает регулярно - значит она предсказуема и изучить си явно было бы нелишне.
Абсолютли согласен. Всеми руками ЗА, чтобы специалисты именно так и делали. Основательно изучали свою сферу деятельности.
Про эффективность "костылей примотанных изолентой" спорить не стану. ИМХО вопрос философский. Для меня это основной жизненный принцип и "согласно известному закону, шанс у меня есть": https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%9F%D0%B...
С вашего позволения, я ушел. А то не успеваю прибор на завтра скрутить-запрограммировать. Изолента то есть, но под солнцем отклеится. Придётся мудрить с пластиковыми стяжками;)
я пользую чёрные, они ультрафиолет лучше держат и изоленту тоже чёрную, немецкую, а то здесь в основном рекомендуют синюю
Это не совсем по теме "Начал изучать программирование..." но по теме
Уже слышал, что чёрный пластик проще сделать стойким к ультрафиолету. По этому, промышленные анемометры чёрные (к примеру). На практике же... Китайские серые комплектующие от домашних метеостанций простояли два сезона под открытым небом и вот уже третий используются, не рассыпались. С прошлого года печатаю прозрачным или белым PLA радиаторы для тех же датчиков температуры. Невероятно, но за прошлый сезон ничего с ними не случилось (если не считать, что бывают "умельцы", которые приделывают этим датчикам ноги).
Нужно ли на улице использовать чёрный пластик и чёрную изоленту? ИМХО не принципиально в масштабах пары лет.