下面的代码1很好用
#include <stdio.h> // code 1
main()
{
printf("%u",main);
}
但是这个代码2给出了分段错误。
#include <stdio.h> // code 2
main()
{
printf("%u",main());
}
我不明白main和main()有什么区别?
发布于 2012-07-28 15:44:28
编译时是否启用了编译器中的所有警告?对于gcc
,这意味着将-Wall
参数提供给gcc
( -g
对于调试信息很有用)。
首先,您的printf("%u", main)
应该是printf("%p\n", main)
。%p
打印一个指针(从技术上讲,函数指针不是%p
所需的数据指针,实际上它们通常具有相同的大小和相似的表示形式),您应该以换行符\n
结束格式字符串。这将获取main
函数的地址并将该地址传递给printf
。
然后,您的第二个printf("%u", main())
使用由recursive call获取的参数调用printf
,该参数由main
函数的recursive call获取。这种递归永远不会结束,而且你会破坏你的调用堆栈(即有一个堆栈溢出),所以在Unix上获取一个SIGSEGV
。
老生常谈地说,main
是C标准的一个非常特殊的名称,您可能不应该调用它(在crt0.o
中,它是由启动代码自动神奇地调用的)。在main
上递归是非常糟糕的品味,而且可能是非法的。
另请参阅我的另一个答案here。
https://stackoverflow.com/questions/11699221
复制相似问题