为什么写作是主要的;在 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变量的位置,错误地认为这是程序的入口点。程序崩溃,因为该位置没有有效的可执行代码。或者,更有可能的是,是数据执行保护导致程序崩溃。

相关内容

  • 没有找到相关文章

最新更新