CppCoreGuidelines E.28 避免基于全局状态的错误处理(比如 errno)
14 August 2023
“Avoid error handling based on global state (e.g. errno)”
理由
全局状态很难管理,容易忘记检查。你上一次什么时候测试过 prinft()
的返回值?
请查看:E.25 模拟 RAII
坏例子
int last_err; void f(int n) { // ... p = static_cast<X*>(malloc(n * sizeof(X))); if (!p) last_err = -1; // error if memory is exhausted // ... }
注意
C 风格的错误处理机制是基于全局的 errno
变量。所以,基本上无法避免这种风格。