Objective-C中的空指针是否取消引用未定义的行为?

usr*_*usr 1 c objective-c undefined-behavior

在C和C++中,空指针取消引用是未定义的行为.Objective-C怎么样?

换句话说,这个代码保证做什么?

*(long*)0 = 0;
Run Code Online (Sandbox Code Playgroud)

背景:我想知道这个答案是否可能触发未定义的行为,可能导致随机的事情,比如语句被优化,甚至更奇怪.

当然,我不认可这样做.不过,了解语言规则很重要.

小智 7

由于Objective-C只不过是C之上的面向对象层,纯C语句没有特殊的附加含义.根据这一点,在这种情况下,*(long*)0 = 0;就像在C中一样进行评估和解释(因为它 C),因此它调用未定义的行为.因此,不保证做任何事情.