2010-06-08 26 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

編譯器發出警告,因爲您可能意外地寫了一條語句而不是表達式。通過在括號中嵌入語句,您可以告訴編譯器您的意圖並阻止他發出警告。