Я пишу небольшой код для включения зуммера, когда показания датчика превышают определенный порог.Чтобы включить зуммер на одну секунду, я дал задержку в 1000 мс, вызвав эту функцию: delay(1000)
.Тем не менее, я случайно набрал delay+(1000)
, и он хорошо компилируется.Является ли этот вызов функции синтаксически правильным?
Я пробовал этот код в Arduino IDE.Он компилируется, но то же самое не относится к avr-gcc или avr-g ++ или gcc / g ++.
Я ожидаю, что delay + (1000) не скомпилируется, так как это не соответствует действительному синтаксису c / c ++.
Обновление 1:
Скомпилирован и загружен следующий фрагмент кода в Arduino UNO с использованием IDE Arduino:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int x = delay+(1000);
Serial.println(x);
}
Он непрерывно печатает случайное число 1132без каких-либо задержек.(Итак, 1132 => Адрес указателя функции + 100?)
Я также заметил, что delay+(1000)
и delay-(1000)
компилируются, но то же самое не верно для delay*(1000)
и delay/(1000)
.Компилятор выдает следующую ошибку:
sketch_jun09a: 8: ошибка: недопустимые операнды типов 'void (long unsigned int)' и> 'int' для двоичного оператора '*'
delay*(1000);
^
Однако, это int t = (int)delay*(1000);
хорошо компилируется.
Обновление 2:
На основании приведенных ниже ответов, delay<operator>(x)
просто выполняет указатель на функциюарифметический (с использованием унарных или бинарных операторов) и не выполняет саму функцию.
Я использовал следующий фрагмент кода:
void setup()
{
Serial.begin(9600);
}
int custom()
{
Serial.println("hello");
return 0;
}
void loop()
{
custom+(1000);
delay+(1000);
}
Он хорошо компилируется и ничего не выводит.
Обновление 3:
Я изменил уровень предупреждений компилятора на «ВСЕ» в «Настройках» в Arduino IDE.При компиляции этого фрагмента,
void setup()
{
delay+(1000);
}
void loop() {}
Получаются следующие предупреждения:
sketch_jun09a.ino: В функции 'void setup ()': sketch_jun09a.ino: 3: 14:предупреждение: указатель на функцию, используемую в арифметике [-Wpointer-arith]
delay+(1000);
^
sketch_jun09a.ino: 3: 8: предупреждение: инструкция не оказывает влияния [-Wunused-value]
delay+(1000);
^