众所周知,在C语言中,=是赋值运算符,==是比较运算符。
下面是=的用法(摘自《C陷阱与缺陷》):
//将y值赋给x,并检查该值是否为0
if (x = y )
break;
下面的例子是关于==的用法的(摘自《C陷阱与缺陷》):
//错误的示范
while (C = ' ' || C == '\t' || C == '\n')
C = getc (f);
//正确的示范
while (C == ' ' || C == '\t' || C == '\n')
C = getc (f);
这个例子中的循环语句本意是:跳过文件中的空格符、制表符和换行号。
因为将==错误的写成了=,并且=的优先级低于||,所以实际上是将(' ' || C == '\t' || C == '\n')的值赋给了C。
但是这个bug是可以运行的,如果不将这个错误加以解决,这个循环将会一直进行到整个文件运行结束。
当文件运行结束后,循环是否还进行下去,这就要取决于getc库函数的具体实现。