gpt4 book ai didi

c - NULL 宏和 nul

转载 作者:行者123 更新时间:2023-11-30 19:55:37 24 4
gpt4 key购买 nike

如果代码中经常使用常量,我们会使用宏来定义常量。为什么“NULL”定义为宏,为什么nul(“\0”)不定义为宏?

最佳答案

可能有一些微妙的原因可以用来证明这种差异,但我预计不需要零字符(在 ASCII 中名为 NUL)的宏。

NULL 可以是实现选择的任何空指针常量,它可以是整数或指针。因此,当您需要空指针常量,但又不想给读者留下使用哪个空指针常量到底很重要的印象时,就可以使用它。基本上,当您希望它是空指针时,您可以使用它来初始化/分配指针。您也可以在测试指针是否为空时使用它。

并不是每个人都愿意使用NULL0NULL 的允许值,因此任何可以可移植使用 NULL 的地方,都可以使用 0 代替。我个人认为,如果 C 语言没有 NULL,它也不会变差。特别是,在可变参数函数中传递 NULL 可能会遇到麻烦,因为人们通常认为它是一个指针,并且如果需要它会转换为指针,但可变参数函数不会转换它。因此,如果它不是需要指针的指针,那么您将得到 UB。这同样适用于作用域内没有原型(prototype)的函数。

您建议的宏总是会扩展为值为 0 的 int。在我看来,“我们需要更多的方式来编写零”,这似乎不会让 C 标准委员会感到兴奋采取行动,即使是提议的。如果有一组宏对基本执行集中的字符进行命名,那么在该集中有一个用于 NUL 的宏就有意义了。但人们似乎很乐意写 'a' 而不是 LATIN_LOWERCASE_A'\n' 而不是 LINEFEED,并且0'\0' 而不是 NUL

关于c - NULL 宏和 nul,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15273714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com