【发布时间】:2010-06-23 13:12:47
【问题描述】:
很久以前,我曾经在学校用 C 编程。我记得我非常讨厌 C 的一点:未分配的指针不指向 NULL。
我问过很多人,包括老师,为什么他们会让未分配指针的默认行为不指向 NULL,因为它似乎更危险,因为不可预测。
答案应该是性能,但我从来没有买过。我认为如果 C 默认为 NULL,编程历史上的许多错误都是可以避免的。
这里有一些 C 代码来指出(双关语)我在说什么:
#include <stdio.h>
void main() {
int * randomA;
int * randomB;
int * nullA = NULL;
int * nullB = NULL;
printf("randomA: %p, randomB: %p, nullA: %p, nullB: %p\n\n",
randomA, randomB, nullA, nullB);
}
编译时带有警告(很高兴看到 C 编译器比我在学校时好得多)并输出:
randomA: 0xb779eff4, randomB: 0x804844b, nullA: (nil), nullB: (nil)
【问题讨论】:
-
多么有趣的问题:)
-
C 说:相信程序员。程序员学会跟踪他们的变量。
-
我认为您将 C 与高级语言混淆了。不是。
-
@Adam Gent:这种区别仅在您的代码访问未初始化变量的值时才重要,它不应该这样做。大多数现代 C 编译器都会抱怨这一点,这是有充分理由的。
-
指针的正确 printf 格式说明符是
%p,而不是%d。