我正在做作业,并且由于我们的约束条件非常严格,因此如果我想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
答案 0 :(得分:2)
我自己在标准中找到了答案:
6.3.2.3指针
4将空指针转换为另一种指针类型将产生该类型的空指针。任何两个空指针应比较相等。
答案 1 :(得分:0)
您认为这不安全吗?但是不要这样做
static inline void exit_on_null(void* ptr, const char* msg) {
if (!*(void **)ptr) {
printf("%s\n", msg);
exit(1);
}
}
// segfault
exit_on_null(NULL, "yeet");