首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >main和main()之间的区别

main和main()之间的区别
EN

Stack Overflow用户
提问于 2012-07-28 15:37:46
回答 1查看 1.3K关注 0票数 0

下面的代码1很好用

代码语言:javascript
运行
复制
#include <stdio.h>    // code 1
main()
{
    printf("%u",main);
}

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

代码语言:javascript
运行
复制
#include <stdio.h>  // code 2
main()
{
    printf("%u",main());
}

我不明白main和main()有什么区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11699221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档