以下代码1很好
#include <stdio.h> // code 1
main()
{
printf("%u",main);
}
但是这段代码 2 给出了分段错误。
#include <stdio.h> // code 2
main()
{
printf("%u",main());
}
我不明白 main 和 main() 之间有什么区别?
以下代码1很好
#include <stdio.h> // code 1
main()
{
printf("%u",main);
}
但是这段代码 2 给出了分段错误。
#include <stdio.h> // code 2
main()
{
printf("%u",main());
}
我不明白 main 和 main() 之间有什么区别?
您是否使用编译器启用的所有警告进行编译?这gcc意味着将-Wall参数提供给gcc(并且-g对于调试信息很有用)。
首先,你printf("%u", main)应该是printf("%p\n", main). 打印一个指针(从%p技术上讲,函数指针不是 所需的数据指针%p,实际上它们通常具有相同的大小和相似的表示形式),并且您应该以换行符结束格式字符串\n。这将获取函数的地址并将main该地址传递给printf.
然后,您的第二个printf("%u", main())是使用通过对函数的递归调用printf获得的参数进行调用。这种递归永远不会结束,而且你会炸毁你的调用堆栈(即堆栈溢出),所以在 Unix 上获得一个。mainSIGSEGV
迂腐地,main是C标准的一个非常特殊的名称,您可能不应该调用它(它是由 中的启动代码自动调用的crt0.o)。递归main是非常糟糕的,可能是非法的。
另请参阅我的其他答案。