2011-09-23 26 views
5

我使用PC皮棉首次。当PC Lint警告我关于我的while(TRUE)时,我正在“干掉”我的代码。PC林特而(TRUE),相较于(;;)

这是它说:

716:而(1)... - 形式的结构,而(1)......被发现。

虽然这表示布尔上下文中的常量,但它可能反映了一种编程策略,其中无限循环为 ,并以此构造为前缀。因此它被赋予一个单独的号码,并且 已被放置在信息类别中。无限循环前缀的更传统的形式是(;;)。

我不明白这种说法。任何人都可以帮助我理解它吗?

+2

'而(TRUE)'可能不是一个无限循环,如果有一个人将TRUE;以'0',而没有办法为与发生'为(;;)'。 –

+2

@Dan D.,肯定有 - 我们在谈论预处理器。那么'#define for(;;)if(0)'怎么样? ;-) –

+1

我知道它在说什么,但这是我不得不说的一个奇怪的解释。 –

回答

5

文说,虽然while(TRUE)(其中被预处理到while(1))是一个完全有效的无限循环,写一个无限循环的更传统的方式是

for(;;) 
{ 
    ... 
} 

,因为它根本不使用任何值所有,因此不太容易出错。

3

上面说的是更传统的无限循环for(;;),我会说是一个值得商榷的说法,而且它的归类此结构为“信息类”发现 - 我怀疑如果你使用的for(;;)相反,它会走开。我一直写这些为while(1),永不for(;;)自己。如果是你所期望的,我会忽略此一台PC皮棉发现或切换,如果你担心有人重新定义TRUE因为如果有人重新定义TRUE你的循环将无法运行。

+6

无论如何,如果有人重新定义了“TRUE”,那么实践循环不会无限地运行,这将是你的最大难题: - ) –