vc++一个工程里面为什么不能有两个main函数呢

ganli0111 2009-09-19 06:44:52
问题如题:vc++一个工程里面为什么不能有两个main函数呢?请高手指教1
...全文
1455 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
bambox 2011-07-13
  • 打赏
  • 举报
回复
的确有这种情况,而且编译也不会出问题.不知道为什么
gxu1990ao 2011-03-01
  • 打赏
  • 举报
回复
说的简单点,因为不是每一个源文件分别编译出一个exe文件,而是一个工程中的所有源文件编译完后链接在一起生成一个以工程名为名字的exe文件,你到可执行文件的文件下下看看其实一个工程只有一个可执行文件,执行其中一个源文件实际上整个工程都在执行,所以不能有两个main函数。
ganli0111 2009-09-21
  • 打赏
  • 举报
回复
真是感谢大家的回复了,没想到一个简单的问题引发大家的深入讨论,牛人真是多啊。不断学习中。。。。。。
delphiwcdj 2009-09-20
  • 打赏
  • 举报
回复
一个主程序只能有一个main函数
dushuchen 2009-09-20
  • 打赏
  • 举报
回复
两方面:
1.程序启动,操作系统分配一个进程空间,同时在该进程中创建一个主线程

2.操作系统初始化C运行时函数库,后者随即寻找main函数执行该主线程

问题来了:初始化时只有一个线程空间,即只能执行一个main
现在出现两个main,到底进入哪一个呢?这是个问题

我认为这是操作系统的设计产生的,即先有线程而后执行函数,若先检查main的数量再动态分配线程
可能会实现lz的设想。
晨星 2009-09-20
  • 打赏
  • 举报
回复
不仅仅是main,同一个工程中,任何一个函数都不能定义两次,除非是重载,或者在不同的名字空间中,或者具有不同的linkage。
xp1988qw168 2009-09-20
  • 打赏
  • 举报
回复
哦..原来是这样咯 刚刚入手
cheng_fengming 2009-09-20
  • 打赏
  • 举报
回复
你在哪见过有写两个main()函数得?
wreckage2009 2009-09-20
  • 打赏
  • 举报
回复
本来想说两句的,但这么多高人,无语// 学习……
gao_zb 2009-09-20
  • 打赏
  • 举报
回复
一个简单的问题就引起这么多讨论,呵呵,学习了。
千万不算多 2009-09-20
  • 打赏
  • 举报
回复
强制性的
这种东西只需记住
想改变
得开发个另类点的操作系统了
魂牽夢縈 2009-09-20
  • 打赏
  • 举报
回复
从MAIN开始的。如果再来一个,就乱了。。
fanchangyong 2009-09-20
  • 打赏
  • 举报
回复
不光只能有一个main啊,任何同名的函数,都不行.
I_NBFA 2009-09-20
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 buf1024 的回复:]
引用 22 楼 i_nbfa 的回复:
引用 20 楼 buf1024 的回复:
引用 16 楼 i_nbfa 的回复:
语言级上C++全局对象的构造函数才是入口点.

上面是不正确的。

在main启动时,OS会为所有全局和静态C++类对象调用构造函数,但主线程的入口是main。


你搞错了, CRT调用的main, 构造函数也是CRT执行的, 这明显是进程产生并运行后发生的.
所以我特别指出了"语言级", 防止把非标准的东西撤近来.

请参阅《Windows 核心编程》第四章.
[/Quote]

参阅什么? 你如果真的认真读过核心编程就不会让我去参阅什么了.

The operating system doesn't actually call the entry-point function you write. Instead, it calls a C/C++ run-time startup function implemented by the C/C++ run time and set at link time with the -entry: command-line option. This function initializes the C/C++ run-time library so that you can call functions such as malloc and free. It also ensures that any global and static C++ objects that you have declared are constructed properly before your code executes. Table 4-1 tells you which entry point to implement in your source code and when.

.
.
.
The linker is responsible for choosing the proper C/C++ run-time startup function when it links your executable. If the /SUBSYSTEM:WINDOWS linker switch is specified, the linker expects to find either a WinMain or wWinMain function. If neither of these functions is present, the linker returns an "unresolved external symbol" error; otherwise, it chooses to call either the WinMainCRTStartup or wWinMainCRTStartup function, respectively.

不用我多做解释了吧.
体验太差 2009-09-20
  • 打赏
  • 举报
回复
从操作系统的角度,main并不是程序的入口,而是一个“回调函数”的概念。
buf1024 2009-09-20
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 i_nbfa 的回复:]
引用 20 楼 buf1024 的回复:
引用 16 楼 i_nbfa 的回复:
语言级上C++全局对象的构造函数才是入口点.

上面是不正确的。

在main启动时,OS会为所有全局和静态C++类对象调用构造函数,但主线程的入口是main。


你搞错了, CRT调用的main, 构造函数也是CRT执行的, 这明显是进程产生并运行后发生的.
所以我特别指出了"语言级", 防止把非标准的东西撤近来.
[/Quote]
请参阅《Windows 核心编程》第四章.
yzx714 2009-09-20
  • 打赏
  • 举报
回复
名字都叫主函数吗,一个单位能有两个正的领导吗?
jianglutian 2009-09-20
  • 打赏
  • 举报
回复
膜拜LZ一下……
sghgcn 2009-09-20
  • 打赏
  • 举报
回复
何止是VC,像JAVA、C#,那种语言允许有两个main
erhan_106 2009-09-19
  • 打赏
  • 举报
回复
学习了 没想到一个简单的问题引出了这么对值得思考的地方 UP~
加载更多回复(23)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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