goto ERR; 模式:int foo() {
void *p = malloc(...);
if (err) goto ERR;
if (err) goto ERR;
return 0;
ERR: free(p); return -1;
}
do { … if (err) break; … } while(0) 結構化替代,無 goto,邏輯清晰。#define EMPTY() do {} while(0) 使空宏展開為合法語句,消除「空語句」警告。do {…} while(0) 不僅優化代碼,更是結構化編程、宏安全、錯誤處理、編譯器友好的多重保障,廣泛用於 Linux 內核、驅動開發、嵌入式系統。