如何在 C 中编译和 运行`main;`
How to compile and run `main;` in C
main;
这是可以用C编译的最小程序。
编译警告(gcc
):
test.c:1:1: warning: type defaults to ‘int’ in declaration of ‘main’ [-Wimplicit-int]
test.c:1:1: warning: ‘main’ is usually a function [-Wmain]
我想从句法上理解它的意思,即:
- 为什么在声明函数时使用分号?
- 为什么缺少括号和大括号是合法的?
我知道函数的默认 return 类型在省略时是 int
。我还听说过在 main
之前调用的 _start
函数。这意味着它正在调用一个尚未定义的函数(?)。
为什么 运行 时可执行文件会出现段错误?
因为您没有为 main
指定类型,编译器默认为 int
类型。不是返回 int
的函数,而是 int
。从句法的角度来看这是合法的,因为您的代码中也可以有 myvar;
,它也可以声明为 int
.
但是因为 main
是特殊的,所以你会收到第二个警告。它让您知道您定义 main
的方式与通常的定义方式不同。
因此,当您编译此程序并尝试 运行 它时,它期望 main
成为函数的开始,而实际上它只是一个 int
变量。这就是导致段错误的原因。
main;
这是可以用C编译的最小程序。
编译警告(gcc
):
test.c:1:1: warning: type defaults to ‘int’ in declaration of ‘main’ [-Wimplicit-int]
test.c:1:1: warning: ‘main’ is usually a function [-Wmain]
我想从句法上理解它的意思,即:
- 为什么在声明函数时使用分号?
- 为什么缺少括号和大括号是合法的?
我知道函数的默认 return 类型在省略时是 int
。我还听说过在 main
之前调用的 _start
函数。这意味着它正在调用一个尚未定义的函数(?)。
为什么 运行 时可执行文件会出现段错误?
因为您没有为 main
指定类型,编译器默认为 int
类型。不是返回 int
的函数,而是 int
。从句法的角度来看这是合法的,因为您的代码中也可以有 myvar;
,它也可以声明为 int
.
但是因为 main
是特殊的,所以你会收到第二个警告。它让您知道您定义 main
的方式与通常的定义方式不同。
因此,当您编译此程序并尝试 运行 它时,它期望 main
成为函数的开始,而实际上它只是一个 int
变量。这就是导致段错误的原因。