我在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;
}
当我使用gcc -Wall ctest.c
(或g ++)编译代码时,我得到以下输出:
ctest.c: In function `int main()':
ctest.c:5 warning: statement has no effect
运行此程序时printf
语句的输出为1.200000
。因此,该陈述确实似乎对foo
的价值没有影响。
什么是*-
运营商?是否有充分的理由为什么语法编译即使语句无效?
答案 0 :(得分:12)
两名运营商
foo * (-3.4);
结果丢掉了。该语句没有左侧,因此编译器可能会完全删除此语句。