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

C 語言「合法但不合理」解析:語法正確邏輯錯誤的經典案例

     編輯:程式設計疑難解答

定義

合法不合理:程式碼符合語法規則,編譯器不報錯 (或僅警告),但**邏輯與開發者意圖不符**,導致運行結果錯誤。

經典案例:賦值誤寫為判斷

if (a = 0) { // ❌ 合法:賦值表達式值為 0 (false),但永遠不進入分支
    // do something
}
  • 開發者意圖:if (a == 0) 判斷 a 是否為 0。
  • 實際行為:將 0 賦值給 a,整個表達式值為 0 (false),if 條件永不成立。
  • 編譯器:語法合法,部分編譯器給出「建議使用 ==」警告。

題目代碼分析

int b, c;
scanf("%d", &c); // 假設輸入 c
b = c < 28;      // 關係運算:c<28 為真則 b=1,偽則 b=0
printf("%d", b); // 輸出 0 或 1

此代碼**語法合法、邏輯合理** (若意圖為判斷大小關係),屬於正常關係運算用法,非「不合理」。

其他常見「合法不合理」模式

  • for (; i < n; i++); 結尾分號導致迴圈體為空。
  • if (x = getValue()) 意圖判斷返回值非 0,實為賦值。
  • 整數除法截斷:double avg = sum / count; (sum、count 皆為 int)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved