c – 为什么默认情况下不用NULL初始化指针?

我想这已经回答了,但我只是在这里或谷歌找不到答案,但我认为这是因为我不能键入正确的问题…

有人可以解释一下为什么没有指针初始化为NULL?
例:

  void test(){
     char *buf;
     if (!buf)
        // whatever
  }

程序不会进入if,因为buf不为null。

我想知道为什么,在什么情况下,我们需要一个变量与垃圾,特别是指针寻址到内存中的垃圾桶?

我们都认识到指针(和其他POD类型)应该被初始化。
那么问题就变成了“谁应该初始化它们”。

那么基本上有两种方法:

>编译器初始化它们。
>开发人员初始化它们。

让我们假设编译器初始化了没有由开发人员显式初始化的任何变量。然后我们遇到了初始化变量的情况,并且开发人员在声明点没有这么做的原因是他/她需要执行一些操作然后赋值。

所以现在我们有这样的情况,编译器添加了一个额外的指令给代码初始化变量为NULL,然后稍后添加开发人员代码来做正确的初始化。或者在其他条件下,变量可能永远不会使用。很多C开发人员会在这两个条件下以这个额外的指令为代价尖叫。

这不只是时间。但也空间。有很多环境,两个资源都是溢价,开发人员不想放弃。

但是:您可以模拟强制初始化的效果。大多数编译器将警告您有关未初始化的变量。所以我总是把我的警告水平,尽可能最高的水平。然后告诉编译器将所有警告视为错误。在这些条件下,大多数编译器将为未使用和使用的变量生成错误,从而防止生成代码。

http://stackoverflow.com/questions/1910832/why-arent-pointers-initialized-with-null-by-default

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 为什么默认情况下不用NULL初始化指针?