作者:飛373227470 | 来源:互联网 | 2023-02-01 15:57
以下是我的demo.c文件:
main;
在编译这个gcc时会发出警告:
demo.c:1:1:警告:数据定义没有类型或存储类[默认启用]
运行./a.out会出现分段错误:
分段故障(核心转储)
是因为,(1)main没有在任何地方定义,我们正在尝试执行它;(2)我们在任何函数之外使用命令语句,因此它无法执行.
在任何一种情况下,我仍然不明白为什么它应该抛出一个段错误.
更新:它可能看起来类似于Is'int main;' 一个有效的C/C++程序?,但这是不同的,因为不使用任何标识符,编译代码.
1> AnT..:
您的代码在标准C中是正式的非法(通常是"不可编译的").您收到的诊断信息旨在准确地告诉您.
但是,您的编译器显然已接受它并解释它是一些特定于实现的方式.显然,它将其解释main
为int
具有外部链接的变量的定义(传统的K&R C特定行为).它创建了一个导出单个外部符号的对象文件main
(可能以某种特定于实现的方式受损).后来的链接器将其注册main
为您的程序的入口点.
当您尝试运行可执行文件时,加载程序将控制权传递给该main
变量的位置,错误地认为这是程序的入口点.程序崩溃,因为该位置没有有效的可执行代码.或者,更可能的是,数据执行预防会导致程序崩溃.