gpt4 book ai didi

c - i_am_bleeding.c 有多危险?

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:07 27 4
gpt4 key购买 nike

我对 C 和基本上所有其他低级别的东西都非常陌生。我遇到了一段代码,但自己无法弄清楚:(我从 here 找到的)

int main(){
void (*i_am_bleeding)() = (void(*)())15;
i_am_bleeding();
return 0;
}

文章用它来支持论点:

C is suffering a backlash of criticism for not having thecharacteristics of an application programming language, such asprotecting the average programmer from cutting himself with sharptools.

但是作者并没有解释这背后的原因,网上也没有找到解释。我试图在我的机器上编译和运行代码。它只给了我一个“Segmentation fault (core dumped)”错误。

那么,谁能告诉我当我执行代码时我的机器发生了什么,以及这样做的危险吗?

最佳答案

So, could anyone tell me what happened to my machine when I execute the code, and the danger of doing it?

在 C 中,运行 C 规范未定义的格式错误的代码是未定义的行为 - UB。 15 不是函数的有效地址 - 因此赋值没有指定的行为。执行它的下一行也是 UB。 C 允许编写这样的代码,甚至可以编译。然而,由于未指定行为,“这样做的危险”(运行可执行文件)是您的计算机可能做任何事情。通常代码会简单地崩溃。

void (*i_am_bleeding)() = (void(*)())15;  // UB
i_am_bleeding(); // UB

C is suffering a backlash of criticism ...

C 44 岁以上。此前曾受到强烈批评。它可能会在几十年后受到批评 - 但仍在使用。

关于c - i_am_bleeding.c 有多危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38676804/

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