首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有理由将NULL而不是0赋值给非指针变量?

问是否有理由将NULL而不是0赋值给非指针变量?
EN

Software Engineering用户
提问于 2016-02-23 07:54:35
回答 3查看 25.1K关注 0票数 3

在定义期间给变量赋值是一种很好的做法。

一个常见的做法是给变量赋值0,指针赋值为NULL。

代码语言:javascript
复制
    int p = NULL; // instead of int p = 0;
    int *ptr = NULL;
    int &ref=p;

是否有理由将NULL而不是0赋值给非指针变量类型?int p = NULL代码在Visual中编译,但它似乎不如将其赋值为零的可读性更低。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2016-02-23 08:32:43

宏NULL是null__指针常量,具有整数类型或指针类型。

使用NULL分配或初始化非指针变量至少会导致其他程序员的问号,并且可能导致编译器失败。

像这样的一行

代码语言:javascript
复制
int a = NULL;

不是很好的代码,它会降低代码的可读性。

票数 21
EN

Software Engineering用户

发布于 2016-02-23 15:06:29

VS 2008将NULL定义为:

代码语言:javascript
复制
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

如果您正在编写一个C程序并使用:

代码语言:javascript
复制
int i = NULL;

会扩展到

代码语言:javascript
复制
int i = ((void *)0);

如果有人手动编写该代码,我会非常怀疑他们作为软件开发人员的技能。

因此,我强烈反对使用

代码语言:javascript
复制
int i = NULL;
票数 1
EN

Software Engineering用户

发布于 2016-02-23 16:11:38

空指针不需要为0。符合实现的标准可能如下所示

代码语言:javascript
复制
#define NULL (void*)0x1234

第二,空指针必须在比较中比较等于0。因此,实现必须确保hat if ((void*)0x1234)的计算结果为false。

我不知道有任何实现会这样做,但是如果您希望NULL可以与0互换工作,那么您就超出了C(或C++)规范的范围。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/310826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档