为什么写作主要; 在C给出段错误

以下是我的demo.c文件:

main;

在编译这个gcc时会发出警告:

demo.c:1:1:警告:数据定义没有类型或存储类[缺省情况下启用]

运行./a.out会导致分段错误:

分割故障(核心转储)

这是因为:(1)main没有在任何地方定义,我们试图执行它,(2)我们在任何函数之外使用命令式语句,所以它不能执行。

无论如何,我仍然不明白为什么它应该抛出段错误。

更新:它可能看起来类似于'int main';' 一个有效的C / C ++程序?,但这是不同的,因为不使用任何标识符,编译代码。


您的代码在标准C中是正式非法的(它通常是“不可编译的”)。 您收到的诊断消息旨在告诉您这一点。

然而,你的编译器显然接受它,并解释它是一些特定于实现的方式。 显然,它将main解释为具有外部链接的int变量(传统K&R C特定行为)的定义。 它创建了一个导出单个外部符号main的对象文件(可能会以某种特定实现方式进行修改)。 后来的链接器将该main注册为程序的入口点。

当您尝试运行可执行文件时,加载器将控制权交给该main变量的位置,错误地认为这是程序的入口点。 该程序崩溃,因为该位置没有有效的可执行代码。 或者,更有可能的是,数据执行预防会导致程序崩溃。

链接地址: http://www.djcxy.com/p/79933.html

上一篇: Why does writing main; in C give a segfault

下一篇: segmentation fault by Special functions