main和main之间的区别()

Bha*_*tan 0 c segmentation-fault

以下代码1没问题

#include <stdio.h>    // code 1
main()
{
    printf("%u",main);
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码2给出了分段错误.

#include <stdio.h>  // code 2
main()
{
    printf("%u",main());
}
Run Code Online (Sandbox Code Playgroud)

我没有得到main和main()之间的区别?

Bas*_*tch 5

您是否编译了编译器启用的所有警告?有了gcc这意味着我们的-Wall参数gcc(并-g在调试信息很有用).

首先,你的printf("%u", main)应该是printf("%p\n", main).该%p打印指针(技术上函数指针不是根据需要为数据指针%p,实际上他们往往有相同的大小和类似的表示),并且你应该换行结束您的格式字符串\n.这需要在地址中的main功能,并通过该地址printf.

然后,你的第二个printf("%u", main())呼吁printf由一个获得的参数递归调用main函数.这个递归永远不会结束,你炸掉你的调用堆栈(即堆栈溢出),所以SIGSEGV在Unix上得到一个.

讽刺的是,它mainC标准的一个非常特殊的名称,你可能不应该调用它(它被启动代码自动神奇地称为crt0.o).递归main是非常糟糕的味道,可能是非法的.

另请参阅我的其他的答案在这里.