main函数能调用吗?

pjie131 2005-07-29 11:23:00
在应用中,我曾经把main函数当做普通的函数调用,用来做异常的恢复,

但是不知道这样做有什么危险没有,我指的是堆栈等一些C下面看不到的东西,

调用main的时候,堆栈会有什么动作呢?

大虾指点一下!~~~

多谢~~
...全文
1598 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2005-08-03
  • 打赏
  • 举报
回复
算了,争论也没什么好处,写个简单的例子不就明白了么?

#include <iostream>
using namespace std;

int count = 10;
void f();

int main( void )
{
cout << count-- << endl;
if(count > 0)
f();
}

void f()
{
main();
}

就是这样,有什么不可以的?main唯一的特别之处就在于系统刚开始运行它就被自动调用,别的函数没有这个特权而已。
其实,只要你有兴趣研究,一个函数的入口也未必非要是main,叫f,叫g都可以,只要提供相应参数给编译器指定具体的入口就可以了。只是如果你不采用编译器默认的入口(main)的话,那么一切程序的初始化动作,比如初始堆栈的分配,I/O初始化都得你自己手工进行了。
微软就是这样做的,它们强行把Win32程序的入口规定成WinMain,所以,在一个Win32程序中,如果你有一个函数叫“main”,那它只不过是个普通的函数而已,因为VC把Win32程序的入口换成了另一个不符合C++标准的名字了。
注意,微软并不是在编译器里做了手脚,因为即使你把VC的cl换成Intel的C++ Compiler,Win32程序也照样可以成功编译运行。他们只是指定了不同的程序入口。
zidane_yubo 2005-08-02
  • 打赏
  • 举报
回复
main函数可以被调用,注意让main函数可以返回
zidane_yubo 2005-08-02
  • 打赏
  • 举报
回复
c专家编程 里面提到了main可以被调用的,但是情况特殊啊
tb01412 2005-08-02
  • 打赏
  • 举报
回复
所谓main函数与其它函数的不同在于,它是程序的入口,就是在编译器链接的时候把它作为最开始的一部分,当然在调用它之前还要做很多其它压栈方面的工作,然后在它之后有可能会调用一些子函数,如果在其它地方再调用main函数,就会进行递归,如果没有显示指出递归退出条件,岂不是要进入死循环?

naturemickey 2005-08-02
  • 打赏
  • 举报
回复
这是绝对可以的,ICOOO的一大特点就是:main函数递归 + 条件语句嵌套 + 乱七八槽的宏定义字符串连接 + ……
dashang 2005-08-01
  • 打赏
  • 举报
回复
我没有用过,学习!
imi00 2005-07-31
  • 打赏
  • 举报
回复
编译通过,并可以正常运行结束
johnzhaobing 2005-07-31
  • 打赏
  • 举报
回复
可以的 在c和指针 这本书中,就引用了一个例子,具体可看25页
atgjplh 2005-07-31
  • 打赏
  • 举报
回复
不可以,能编译通过不一定就说可以!
xjp6688 2005-07-31
  • 打赏
  • 举报
回复
可以,但是有些编译器不允许递归调用!
iohui 2005-07-30
  • 打赏
  • 举报
回复
main函数只能调用其他函数,却不能其他任何函数调用,因为这样会使程序死循环。
cccclb 2005-07-30
  • 打赏
  • 举报
回复
当然
Jagen在路上 2005-07-30
  • 打赏
  • 举报
回复
没有问题,这是一种第归调用,注意要有返回条件。
dudongxiao 2005-07-30
  • 打赏
  • 举报
回复
更正一下:
#include <iostream>
using namespace std;

int count = 2;

int main()
{
if (count > 0)
{
cout << "main函数调用成功!" << endl;
count--;
main();
}

return 0;
}
dudongxiao 2005-07-30
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int count = 2;

void main()
{
if (count > 0)
{
cout << "main函数调用成功!" << endl;
count--;
main();
}

return 0;
}
试过了,可以的!
Wolf0403 2005-07-30
  • 打赏
  • 举报
回复
如果你的 restart 的动作是结束当前执行并且从头开始重新执行程序,那么这样递归调用不是一个很好的办法。
晨星 2005-07-30
  • 打赏
  • 举报
回复
哦,说错了,不是死循环,是无穷递归。
晨星 2005-07-30
  • 打赏
  • 举报
回复
当然可以。
如果是exe程序,防止形成死循环就行了。
guoshanhe 2005-07-30
  • 打赏
  • 举报
回复
我觉得可以。
main()函数也和其他函数一样,只不过最初由操作系统调用,而main()函数再调用其他函数,除了这外,其他特点应该和一般函数一样。
adsfdda 2005-07-30
  • 打赏
  • 举报
回复
main函数的定义是这样的:
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
加载更多回复(23)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧