2010-06-08 25 views
1

我用下面的,在我的计划论证工作,但它似乎只是递给我一个警告(只是一个警告):"warning: suggest parentheses around assignment used as truth value"C++:具有参数的真值赋值警告?

代码的开头如下:

while((++argv)[0] && argv[0][0]=='-'){ 
     while(c =* ++argv[0]) 

while(c =* ++argv[0])部分是警告持续的地方。该代码工作正常,但这个警告是什么意思反对什么是使用?

我认为代码是c = *++argv[0],使用指针。那么为什么单个=工作,真正推荐使用什么?

+0

c = *((++ argv)[0]),如果这就是你想要做的.. – Jack 2010-06-08 09:39:28

回答

5

编译器是不确定是否打算

while(c == whatever) 

代替。这是错误使用赋值而不是在条件表达式内进行比较的常见错误。有时你需要分配,有时候不需要,编译器会给出警告。为了让编译器知道你真正想要的让渡,而不是发出警告使用:

while((c =* ++argv[0]) != 0) 
1

你需要括号一倍,明确规定你真的要测试c的值:

while((c =* ++argv[0])) 
1

编译器发出警告,因为您可能意外地写了一条语句而不是表达式。通过在括号中嵌入语句,您可以告诉编译器您的意图并阻止他发出警告。