c++ - 在 C 或 C++ 中,我应该根据 NULL/nullptr 检查指针参数吗?

标签 c++ c null

这个问题的灵感来自 this answer

我一直认为,当调用者做了一些愚蠢的事情时,被调用者永远不会负责,比如传递无效参数。我得出这个结论有几个原因,但也许最重要的一个来自 this article :

Everything not defined is undefined.

如果一个函数在它的文档中没有说传递 nullptr 是有效的,那么你最好不要将 nullptr 传递给那个函数。我认为处理此类事情不是被调用者的责任。

但是,我知道会有一些人不同意我的观点。我很好奇我是否应该检查这些东西,以及为什么。

最佳答案

如果您要检查未签订契约(Contract)以接受和解释它们的 NULL 指针参数,请使用 assert 执行此操作,而不是条件错误返回。这样,调用者中的错误将立即被检测到并可以修复,并且可以轻松禁用生产构建中的开销。我质疑 assert 的值(value),但作为文档除外;取消引用 NULL 指针的段错误对于调试同样有效。

如果你将错误代码返回给一个已经证明自己有问题的调用者,最有可能的结果是调用者会忽略该错误,而当错误的最初原因变得难以或无法追查。为什么假设调用者会忽略您返回的错误是合理的?因为调用者已经忽略了 mallocfopen 或其他一些返回 NULL 的特定于库的分配函数的错误返回> 表示错误!

关于c++ - 在 C 或 C++ 中,我应该根据 NULL/nullptr 检查指针参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390007/

相关文章:

c - 在 GCC 进行的每次优化后获取汇编代码?

c - 在数组中查找素数和复合元素。按升序打印质数并按降序合成

c - GTK+3 禁用窗口中存在的关闭图标(c 程序)

c++ - 将输入参数发送到另一个函数

c++ - Linux g++ 编译

c++ - 在网络摄像头图像中查找 ROI

java - JPA 连接具有空值的列

c# - 在 C# 项目中导入 C++ dll

sql - 具有另一个复杂类型字段的复杂类型中的空检测

oracle - 如何索引具有空值的日期列?