在C中的main()函数之前打印“Hello world”

从Quora复制的以下程序,在main()函数之前打印"Hello world"

#include <stdio.h>
#include <unistd.h>

int main(void)
{
  return 0;
}

void _start(void)
{
  printf ("hello, worldn");
  int ret = main();
  _exit (ret);
}

然后,我使用以下命令在Ubuntu-14.04 GCC编译器上编译了上述程序

gcc -nostartfiles hello.c

并运行a.out可执行文件,但我得到Segmentation fault (core dumped) ? 那么,为什么分段错误


_start是可执行文件的真实入口点,通常由C运行时初始化它的东西(包括stdio),用constructor属性标记的调用函数,然后调用您的main入口点。 如果你使用它并尝试使用标准库中的东西(比如printf ),那么你生活在危险之中,因为你正在使用尚未初始化的东西。

但是,您可以做的是完全绕过C运行时,并使用直接系统调用(例如write打印。

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

上一篇: Print "Hello world" before main() function in C

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