c - 将指针转换为 void* 然后与 NULL 进行比较是否安全

标签 c pointers casting void-pointers

我正在做作业,由于我们的约束非常严格,如果我想要 100%,我需要检查所有地方的 NULL 指针。所以我做了一个小的内联函数来检查 NULL 的指针:

static inline void exit_on_null(void* ptr, const char* msg) {
    if ( ! ptr ) {
        printf("%s\n", msg);
        exit(1);
    }
}

现在我问自己这样做安全吗?根据标准,我知道将指针转换为 void* 并返回并接收原始指针是省事的方法。这是否表明指针的 void* 版本仍然与 NULL 相当,或者是否存在一些我可以运行的陷阱?例如,以下是否始终为真?

ptr = NULL
(void*) ptr == NULL

最佳答案

我自己在标准中找到了答案:

6.3.2.3 Pointers

4 Conversion of a null pointer to another pointer type yields a null pointer of that type. Any two null pointers shall compare equal.

关于c - 将指针转换为 void* 然后与 NULL 进行比较是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510988/

相关文章:

c - 当我将 strlen() 应用于指向单个字符的指针时,为什么我得到的长度为 7?

c++ - 理解指针的使用

c - C 中数字的隐式类型

c - 如何返回二维数组?

c++ - 被信号中断的系统调用仍需完成

CreateThread 中的转换错误

c - 隐藏类型的性质

c - 预处理器数据检索宏

c++ - std::string::npos == -1 总是为真吗?

java - 事实上,泛型类的原始类型可以采用该泛型类的所有不同变体,这与 Java 兼容性有关吗?