所以我有这么好的代码,我碰巧有一个错字:
for(int x=firstKey; x <- runner->numKeys; x++){...}
该程序不仅顺利编译,而且连接并运行没有问题。
当然,for循环甚至没有运行一次。但我无法理解<-
被解释为什么?这怎么合法?
答案 0 :(得分:4)
这是以这种方式解释的:
for(int x = firstKey; x < -runner->numKeys; x++)
空格在C中几乎无关紧要。例外情况包括您无法在<=
或::
等标记内添加空格。但通常允许令牌之间的空格,并且在大多数情况下也允许删除令牌之间的空格。
答案 1 :(得分:2)
实际上,它的不是错误的语法,它完全是有效的语法,语句也是如此:
if (a = 7) doSomething(); // will set a to 7 and call doSomething().
b == 42; // won't set b to 42 at all.
你所拥有的是语义问题而不是句法问题。 的意思,而不是构造,是不正确的。
表达式:
x <- runner->numKeys
被解释为:
x < (-runner->numKeys)
换句话说,只要x
小于键数的否定,循环就会运行。由于键的数量很可能是正的(尽管有一个零的边缘情况需要考虑),否定将是负的,因此如果第一个键是非负的,则不会运行正文。
在任何情况下,边缘情况都是无关紧要的,因为行为仍然是不正确的,只是以不同的方式。我收集你可能的意思是:
x <= runner->numKeys
x < runner->numKeys