gpt4 book ai didi

c - 程序不应按照 `C faq` 运行,但它可以运行

转载 作者:行者123 更新时间:2023-11-30 21:13:43 26 4
gpt4 key购买 nike

当我遇到 this 时,我刚刚浏览了 c-faq页。我声明以下程序将有一个核心转储:

struct list {
char *item;
struct list *next;
}

/* Here is the main program. */

main(argc, argv)
{}

他们告诉发生核心转储的原因是:

A missing semicolon at the end of the structure declaration causes main to be declared as returning a structure. (The connection is hard to see because of the intervening comment.) Since structure-valued functions are usually implemented by adding a hidden return pointer (see question 2.9), the generated code for main() tries to accept three arguments, although only two are passed (in this case, by the C start-up code). See also questions 10.9 and 16.4.

尽管如此,当我通过 here 在线运行这个程序时,它运行得很好,程序确实运行到了最后。另外,当我使用 gcc 编译这个程序时,我没有收到任何警告。

我很惊讶,因为程序应该没有运行到最后。有人能告诉我为什么这个程序有效吗?如果它是正确的,为什么会提到该程序将无法运行(有可能崩溃吗?)。

注意:请不要发表诸如use int main之类的评论,因为我只是复制粘贴了代码,实际上我使用了正确的方式。

最佳答案

这是对 C FAQ 的误读。

C FAQ 解释了为什么代码不正确,但并没有说代码一定会崩溃。以下是您引用的部分内容:

Since structure-valued functions are usually implemented by adding a hidden return pointer...

我添加了强调。 C 常见问题解答解释了代码可能崩溃的原因。无论哪种情况,代码都是不正确的。 (理论上,行为可能是由实现定义的,但您的 C 实现极不可能定义这种情况下发生的情况。)

在许多系统 (ABI) 上,如果结构足够小,返回结构的函数将使用寄存器作为返回值。我不知道常见的 x64 ABI 的限制是什么,但是两个字(两个指针)相当小。

关于c - 程序不应按照 `C faq` 运行,但它可以运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35153844/

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