我在编程时碰到了这一点,并在函数调用后忘记了括号,但是我只得到了一个警告,但忽略了它:

main.cpp:7:15: warning: expression result unused [-Wunused-value]
                if (i == 0) clearDisplay;
                            ^~~~~~~~~~~~

只是做同样的事情
int i = 0;
i;

为什么这不是编译器错误?
#include <iostream>

void clearDisplay(void);

int main(void){
    for(int i = 0; i < 2; i++){
        if (i == 0) clearDisplay;
    }
}

void clearDisplay(void){
    std::cout << "test" << std::endl;
}

编辑:
g++ "Calling" function without parenthesis ( not f() but f; ). Why always returns 1?相对,我不问为什么将其隐式转换为数字,但为什么编译器不会像if(i=0)if(i==0)那样警告我

最佳答案

您可以将clearDisplay视为函数的地址。至关重要的是,它将具有一个非零的数值,并且由单个变量组成的语句在语法上是正确的。

09-25 19:05