Ви не увійшли.
В ходе работы наткнулся на неприятность. Не работает такая конструкция:
void setup(){
.....
if (analogRead(ButonsPin) < 100) Set_Time_and_Date;
.....
}
void Set_Time_and_Date(){
.....
}
void loop() {
....
}
Если тело функции Set_Time_and_Date перенести в setup под оператор if - все работает. Так должно быть?
Неактивний
void Set_Time_and_Date(void);
void setup(){
.....
if (analogRead(ButonsPin) < 100) Set_Time_and_Date ();
.....
}
void Set_Time_and_Date(){
.....
}
void loop() {
....
}
[change]
Не работает такая конструкция? ) точки не правильно интерпретирует компилятор?
компилятор должен знать что за функция Set_Time_and_Date, объявите ее заранее,
бывает что не нужно, не в strict ANSI такое нужно
[add]
действительно фигню написал непонятную )
Arduino IDE ( Wiring ) это какой себе не строгий С++,
и можно себе позволить объявление функций в любом "месте" ( наверное, не проверял %) )
Остання редакція NoName (2016-07-11 09:34:15)
Неактивний
Не соглашусь с NoName. Тема видимости переменных и функций хорошо изложена в любом учебнике по Си. То есть если тело находится не внутри другой функции ( в т.ч. setup(), loop() ) она становится внешней и не важно где Вы ее используете до описания тела или после. Я например все внешние функции пишу после loop() и никогда не было проблем использования их в setup или loop. Вопрос в другом, язык wiring имеет некоторые особенности и как мне кажется в том числе синтаксические (в некоторых случаях фигурные скобки очень важны). Я ОЧЕНЬ бы не рекомендовал использовать синтаксическую конструкцию:
if (условие) функция;
Думаю что эта "вольность" Си Вас и подводит. Напишите по "правильному":
if (условие){
функция;
......;
}
Тоесть:
if (analogRead(ButonsPin) < 100) {
Set_Time_and_Date ();
}
Остання редакція Nefreemen (2016-07-09 20:01:56)
Неактивний
Долго не отписывал, так так прибор находится в машине, времени на эксперименты не было, а машина без него не едет.
Вобщем работает все, независимо от того где располагать тело функции и как писать с {} или без них. Это я лоханулся при написании кода и на компиляцию пошел вариант как в 1-м сообщении (без скобок после Set_Time_and_Date), но самое интересное, что компилятор не ругнулся. Видимо имя Set_Time_and_Date где-то уже объявлено в недрах системных библиотек или х.з. чем Wiring нравится Set_Time_and_Date, что он молча проглотил все это. Специально убираю любую букву из Set_Time_and_Date и, вуаля, компилятор начинает ругаться.
Ось так от х@йня, малята.
(С) Дід Панас.
Неактивний