如果只是 C 就算了,但放在更一般的背景下这种习惯是个错误示范。 最直接的理由是,因为很多 C 代码同时会被当作 C++ 代码复用(通过预处理器控制),而在 C++ 下,这里的惯用法就有些问题了。 C++ 中,像 if 这样的上下文专门引入 contextually convert to bool 来描述,这是一个语言层面上一等的机制,独立于整数表示的含义的判断。虽然这个 wording 是 C++11 加入的,根本问题是 C++ 原生支持具有特定用途的 bool ,而不是 C99 这样加补丁搞的 _Bool ,并没法让 if 依赖。虽然 C++ 这样做的必要性还有跟 explicit 之类搞事的问题,但原则上 C 缺乏 bool 而让整数越俎代庖开洞是个过时的设计,据此不得不依赖 == 来判断条件,在有其它选择的情形下也不是一个好习惯。 使用 NULL 至少对兼容 C++ 的代码还有其它显然的问题,例如 -Wzero-as-null-pointer-constant 。这种情况下就算非要用显式的空指针,也应该用字面量 nullptr 而不是 NULL 。注意 C++ 虽然一直支持 NULL ,但一直以来都和 C 略有区别——允许是 0 或者 0L 而禁止(void*)0 。这个限制和类型检查的强度有关(考虑 char* p = NULL; ),再次暴露了 C 设计在这里的无能(虽然讽刺的是,C++ 引入 nullptr 的一个原因是 0 或 0L 的类型干扰重载)。