什么时候主要返回什么,为什么我得到了主要在linux c中调用的最后一个func的返回值?

ccw*_*ccw 0 c linux program-entry-point

这是我在linux中的代码:

#include <stdio.h>
static int tt(void);
static int tt(void)
{
  return 1;
}
int main(int charc,char **charv)
{
  tt();
}
Run Code Online (Sandbox Code Playgroud)

在shell中:

$./a.out
$echo %?
$1
Run Code Online (Sandbox Code Playgroud)

为什么我得到"1"作为结果

dbu*_*ush 7

从非void函数返回而不返回值是未定义的行为.你不能依赖于结果.

main从C99标准开始的功能有一个特殊情况.如果没有main返回值,则假定返回值为0.但是,您似乎在C89模式下编译(这是gcc的默认设置),这是不允许的.

如果我将此代码编译为C89,则会收到有关不返回值的警告.为了演示未定义的行为,如果我在没有优化的情况下编译,则退出状态为1,但如果我使用-O3退出状态编译为96.

如果我在C99模式下编译,我没有得到任何警告,程序的退出状态为0.

要在C99模式下编译,请将标志传递-std=c99给gcc.