c ++:带参数的真值分配警告?

时间:2010-06-08 09:34:18

标签: c++ arguments compiler-warnings

我使用以下方法处理我的程序中的参数,但它似乎只是给我一个警告(只是一个警告):"warning: suggest parentheses around assignment used as truth value"

代码的开头如下:

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

while(c =* ++argv[0])部分是警告持续存在的地方。代码工作正常,但是这个警告意味着与使用的内容相反?

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

3 个答案:

答案 0 :(得分:5)

编译器不确定您是否打算

while(c == whatever)

代替。 误用赋值是常见错误,而不是条件表达式中的比较。有时您确实需要分配,有时不需要,编译器会发出警告。为了使编译器看到你真的想要赋值而不发出警告,请使用:

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

答案 1 :(得分:1)

你需要加倍括号来明确表明你真的想要测试c的值:

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

答案 2 :(得分:1)

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