为什么* - 语法/运算符在C/C++中有效?

mow*_*wen 0 c c++ syntax

我在C程序中输了一个错字,我很困惑为什么编译它,语法的意义是什么.我试图使用乘法赋值运算符*=但不小心输入*-.这是一个例子:

#include <stdio.h>
int main()
{
    double foo = 1.2;
    foo *- 3.4; /* I meant to type foo *= 3.4; */
    printf("%f\n", foo);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我用gcc -Wall ctest.c(或g ++)编译代码时,我得到以下输出:

ctest.c: In function `int main()':
ctest.c:5 warning: statement has no effect
Run Code Online (Sandbox Code Playgroud)

printf运行此程序时语句的输出是1.200000.因此,该陈述确实似乎对价值没有影响foo.

什么是*-运营商?是否有充分的理由为什么语法编译即使语句没有效果?

Fra*_*bot 12

两个运营商

foo * (-3.4);
Run Code Online (Sandbox Code Playgroud)

结果扔掉了.该语句没有左侧,因此编译器可能会完全删除此语句.