delay(1000)
。然而,我随意输入了delay+(1000)
,它能够编译通过。这个函数调用语句在语法上是否正确?我已经在Arduino IDE上尝试了这段代码。它可以编译,但是对于avr-gcc、avr-g++或gcc/g++来说不是这样的。
我预期
delay+(1000)
不能编译通过,因为它似乎不是有效的C/C++语法。
更新1:
使用Arduino IDE编译并上传了以下代码片段到Arduino UNO: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: error: invalid operands of types 'void(long unsigned int)' and >'int' to binary 'operator*'
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的首选项下更改了编译器警告级别为“ALL”。在编译此片段时,
void setup()
{
delay+(1000);
}
void loop() {}
以下是获得的警告:
sketch_jun09a.ino: In function 'void setup()': sketch_jun09a.ino:3:14: warning: pointer to a function used in arithmetic [-Wpointer-arith]
delay+(1000); ^
sketch_jun09a.ino:3:8: warning: statement has no effect [-Wunused-value]
delay+(1000); ^