加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C 98正确检查空指针

发布时间:2020-12-16 07:21:34 所属栏目:百科 来源:网络整理
导读:C++11引入了nullptr关键字,我没有这个关键字. 我想C中有一个NULL宏,我从一些东西here和here中读到了C,但是我仍然不确定在这个较旧的C标准中检查空指针的正确方法是什么. 我本质上希望能够使用Boost Test为我的测试用例编写这段代码: aWrapperDataStructure
C++11引入了nullptr关键字,我没有这个关键字.

我想C中有一个NULL宏,我从一些东西here和here中读到了C,但是我仍然不确定在这个较旧的C标准中检查空指针的正确方法是什么.

我本质上希望能够使用Boost Test为我的测试用例编写这段代码:

aWrapperDataStructure x;
BOOST_CHECK_NE(x.get_ptr(),static_cast<decltype(x.get_ptr())>(nullptr));

但是,正如Tutorials Point所建议的那样,考虑到约束,这样的事情更合适:

BOOST_CHECK(x.get_ptr()); //true when not NULL

虽然有些事情让我失望,所以我想知道这里的最佳做法是什么.如果它在某个地方,或在SO上,它已被埋没,我找不到它.谢谢!

解决方法

我觉得在这里回答我自己的问题并不合适,因为我绝对没有资格,但是我从詹姆斯·坎泽那里读到了这个答案 here(尽管有更新的标准,它仍然标记为C):

If you use g++,you really should use NULL.

这对我来说绝对够用.我发现这些表达式用于检查空指针:

(p != NULL) //requires #include <stddef.h>

(p != 0)

(p)

在这3个中,我在我的问题中提到的最后一个,是从指针到bool(嘶嘶声)的隐式转换.使用!=和==至少会显式转换为bool,而且,使用NULL显示您检查空指针的意图.

因此,我认为即使不使用g,表达式(p!= NULL)也是旧C标准最合适的方式. (但是,我仍然会放弃别人的专业知识并标记他们的答案;我只是一名本科生.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读