在C语言中,NUL和NULL可以互换使用吗?

15 浏览
0 Comments

在C语言中,NUL和NULL可以互换使用吗?

刚读了Kenneth Reek的《C指针》一书。书中说,NUL字节是其所有位都为0的字节,表示为'\0',而NULL的值为0,指向一个值为零的指针。

两者都是整数且具有相同的值,因此可以互换使用。

还有这段代码:

char const *keyword[] = { "do", "for", "if", "register", 
                              "return", "switch", "while", NULL };

在这段代码中,NULL允许搜索表的函数检测到表的末尾。因此,我们可以互换使用NULL和NUL宏吗?

0
0 Comments

在C语言中,没有标准化的NUL宏。与普通的0字面量相比,NULL具有优势,它向读者指示“嘿,我们正在处理一个指针”,这可能被认为是一个优点。

在C++中,惯用法是一段时间以来只写0,但后来他们似乎改变了主意,引入了一个新的字面量nullptr,原因不详。

在C中,我建议对指针使用NULL,对字符使用'\0'。

更重要的是,避免对字符使用NULL,因为如果您的代码变为C++11,能够将NULL搜索和替换为nullptr将给您额外的类型安全性。而每次使用NULL作为整数常量零而不是指针将使这更加困难。

nullptr的原因是它是一个void *指针。而C中的NULL不是。因此,“某些原因”是为了类型安全。

0
0 Comments

NUL和NULL在C语言中可以互换使用吗?

NUL是ASCII字符代码0的表示方式。

NULL是在stddef中定义的一个宏,表示空指针。

所以,答案是否定的,它们不能互换使用。

NULL的大小与指针相同(通常是32位或64位)。NUL的大小与字符相同(在C语言中通常是8位,在其他支持16位Unicode的语言中有时是16位)。它们不能互换使用。

如果在字符串中使用0,则应使用NUL。如果在指针中使用0,则应使用NULL。只有NULL在C语言中有一个宏。在C语言中,所有的字符串字面量都会在编译器自动添加一个NUL 0字节,因此不需要宏。

“NULL的大小与指针相同”-->也许是这样的。它可能与int的大小相同。NULL的类型没有指定。

0