gpt4 book ai didi

c - 为什么调用 exit 函数会创建一个新的基本 block

转载 作者:行者123 更新时间:2023-11-30 14:21:25 24 4
gpt4 key购买 nike

我有一个函数定义为:

int f_2() {
rand();
return 10;
}

clang 将其分为 3 个基本 block 。这是可以理解的。

但是,当我用 exit(0) 替换对 rand() 的调用时,它会将其分成 4 个基本 block 。维基百科 ( http://en.wikipedia.org/wiki/Basic_block ) 表示无法返回的函数可能位于基本 block 的末尾。

clang 如何知道 exit() 函数没有返回?我正在使用 clang -c 编译我的代码。

最佳答案

clang是一个C编译器;它可以利用语言标准对标准库函数所做的保证。

<stdlib.h>的具体实现中也可能存在一些问题。这使得exit()作为不返回的函数,可能使用语言扩展或 _Noreturn 2011 ISO C 标准添加的关键字。

另一个例子:调用 sin(0.0) ,与 -O1或更高版本,编译为文字 0.0 ,因为编译器知道 sin功能。 (这意味着调用 sin(0.0) 的程序只有在不优化的情况下才需要与 -lm 链接。)

这都是允许的,因为定义自己的(非 static )与标准库函数同名的函数具有未定义的行为;编译器不需要考虑调用 exit 的可能性或sin执行标准为这些函数指定的内容之外的任何操作。

关于c - 为什么调用 exit 函数会创建一个新的基本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714325/

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