首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 `while(k=1)` 陷阱:賦值與比較的致命差異導致無限迴圈

     編輯:程式設計綜合問答

原始程式碼

int k = 0;
while (k = 1)
    k++;

錯誤分析

  • k = 1 是 賦值運算式,將 1 存入 k,運算式值為 1(非零)。
  • while 判斷條件為非零 → 永真。
  • 迴圈體 k++ 執行後 k 變 2,下一次判斷 k = 1 又將 k 重設為 1,條件永遠為真。
  • 結果:無限迴圈,選項 A 正確。

正確寫法

while (k == 1)  // 雙等號比較
    k++;

防範技巧

  1. 採用「尤達條件」:while (1 == k),誤寫單等號編譯報錯。
  2. 開啟編譯器警告:GCC/Clang -Wparentheses,MSVC /W4 會提示「assignment used as truth value」。
  3. 靜態分析工具(Cppcheck, SonarQube)可自動偵測。

延伸:C++17 `if (auto k = foo(); k == 1)`

C++17 引入初始化語句,將賦值與比較分離,從語法層面杜絕此類錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved