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

C語言 do-while(0) 技巧:優雅替代 goto 的錯誤處理模式

     編輯:C 語言入門

問題:多資源分配的錯誤處理

bool init_all(void) {
    Resource *p = NULL, *q = NULL, *r = NULL;
    bool ok = true;

    do {
        if (!(p = alloc())) { ok = false; break; }
        if (!(q = alloc())) { ok = false; break; }
        if (!(r = alloc())) { ok = false; break; }
        // 更多初始化...
    } while (0);

    if (!ok) {
        free(r); free(q); free(p);
        return false;
    }
    return true;
}

為何用 do-while(0)

  • 構造單次執行的代碼塊,可在其中用 break 跳出。
  • 避免 goto 標籤污染函數作用域。
  • 配合宏定義時,防止分號吞噬、變量作用域洩漏:
    #define SAFE_FREE(p) do { free(p); p=NULL; } while(0)

宏定義中的經典用法


總結

do { ... } while(0) 是 C 語言構造「單執行塊、可 break、可用於宏」的標準慣用法。它將 goto 的跳轉能力封裝在結構化控制流中,是 Linux 內核、開源庫廣泛採用的錯誤處理模式。

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