首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言經典易錯:鏈式比較 1 <= a <= 10 的陷阱

     編輯:關於C

錯誤代碼

int a = 20;
if (1 <= a <= 10)  // 程序員以為判斷 a 在 1~10 之間
    printf("in range\n");
else
    printf("out of range\n");

輸出結果

in range

原因剖析

C 語言不支持數學意義的鏈式比較。表達式 1 <= a <= 10 按運算符結合性(左結合)解析為:

(1 <= a) <= 10
→ (1 <= 20) 為 1 (真)
→ 1 <= 10 為 1 (真)
→ 整個條件成立

正確寫法

if (1 <= a && a <= 10)  // 邏輯與連接兩個獨立比較
    printf("in range\n");

延伸警示

  • a == b == c 同理錯誤,應為 a==b && b==c;
  • Python、數學支持鏈式比較,C/C++/Java/C# 均不支持;
  • 編譯器通常不會警告,極易潛伏成邏輯 Bug。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved