- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 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/
我对 C 和基本上所有其他低级别的东西都非常陌生。我遇到了一段代码,但自己无法弄清楚:(我从 here 找到的) int main(){ void (*i_am_bleeding)() = (
我是一名优秀的程序员,十分优秀!