2015-02-10 85 views
-3

所以我有这个代码辉煌行,我正好有一个错字:编译器不会抱怨错误的语法

for(int x=firstKey; x <- runner->numKeys; x++){...} 

不仅没有顺利编译而且程序链接,并没有跑一个问题。

当然for循环没有运行一次。但我不明白什么<-被解释为?这是如何合法的?

+4

这就是元减运算符。 – 2015-02-10 05:07:05

回答

4

它被这样解释的:

for(int x = firstKey; x < -runner->numKeys; x++) 

空白在C.例外大多微不足道包括您不能添加空格内令牌像<=::。但是令牌之间的空间通常是允许的,并且大部分时间也允许删除令牌之间的空间。

+0

现在我明白了,谢谢!另外,这是C. – codehitman 2015-02-10 05:10:09

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 
相关问题