问个很简单的问题,微软的mfc是不是完全按标准的c++写的?
如题
因为我看到有篇文章中提到:
MFC。从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder和Symantec C++同样可以处理MFC。
所以我想问问大家
问题点数:300、回复次数:19Top
1 楼turongguo(无痕雨)回复于 2001-12-13 11:42:45 得分 20
不是完全按照标准的C++写的。微软有时的提议非常好,可是实现的时候受商业利润的驱动变成了另外一回事。关于这点,你可以看程序员杂志的第10期的有一篇评论。Top
2 楼coolstar(酷星)回复于 2001-12-13 11:46:39 得分 0
同样的borland公司的类库,vc就无法编译,为什么?
Top
3 楼ljnow0(游荡中的人)回复于 2001-12-13 11:53:55 得分 20
在最早的mfc出现的时候,标准c++还没有出现,所以有一些是mfc特有的。
不过,微软认为自己够牛,所以一般不太理会那些别人的标准Top
4 楼turongguo(无痕雨)回复于 2001-12-13 12:04:08 得分 0
这是很正常的。BC中的类库和VC中的类库不同(类名,属性,方法),类的结构图也不同。还包括实现类库的一系列机制以及连接的动态链接库。例如在VC类库中有Cobject类,而BC类库中无Cobject类。而你程序中的类一般都派生自Cobject类,如何调试过Top
5 楼hujun614(向2个或2个以上的板块都至少是二星用户的朋友学习)回复于 2001-12-13 13:29:16 得分 20
其实每种C++开发工具都只是在一定程度上尊循C++标准,总有地方由于不同的原因,不能完全付合C++标准的。Top
6 楼Kummer(Kummer)回复于 2001-12-13 14:36:08 得分 20
我认为微软的MFC是不是按照C++标准写的,
这是我从
我的回忆和有趣的故事---C/C++圣战篇(上) by 李维(台湾) 方圆 荐
摘录下的一段(很有意思的一篇文章,讲BC和VC的编译器之战)
在1993年初Symantec和Watcom分别和Microsoft签约License MFC做为它们的开发工具的C/C++ Framework。
至此大势以定,在C/C++ Framework的市场已经形成三家夹击一家的形式。当时许多人便预估Borland将成为输
家,因为市场已经成为一面倒,MFC看起来已经是胜券在握了。在当时於Borland的内部也展开了激烈的辩论,
讨论是否也要License MFC做为C/C++的Framework,停止继续开发OWL。不过后来Borland还是决定继续开发OWL,
而不使用MFC,因为Borland的C/C++技术小组认为MFC不论是在架构上或是设计上都比不上OWL。而且由於Visual
C/C++在当时对於C/C++的标准支援不如Borland C/C++,因此在MFC内部使用了大量的Macro以及不标准的语法,
因此如果Borland C/C++要使用MFC,那么还需要修改编译器来编译MFC。
Top
7 楼coolstar(酷星)回复于 2001-12-13 14:41:08 得分 0
bc可以编译mfc,为什么vc编译不了OWL ?
Top
8 楼FatCatHu()回复于 2001-12-13 14:58:51 得分 20
因为Borland的C++对C++标准的"厂商扩展"同样有趣。Top
9 楼whool(喔)回复于 2001-12-13 15:15:11 得分 20
不可能完全按照标准C++写,他隐藏了很多自己的东西。Top
10 楼TsuLeon()回复于 2001-12-14 09:59:15 得分 0
老兄,这根本不是什么标准不标准的问题,纯粹是商业上的考虑。
微软巴不得BCB死了算了,怎么还会跑去支持什么VCL、OWL?
宝蓝支持MFC不就给自己多了一条生路吗?
这种事又不是第一次了,而且还不限于开发软件领域。
感觉GCC 3.0以后的版本对标准C++支持的还不错,哪位大虾有更好的别忘了通知小弟一声啊
Top
11 楼ydogg(灰毛兔频频)回复于 2001-12-14 10:08:18 得分 20
BCB支持mfcTop
12 楼finalwish(gogo)回复于 2001-12-14 10:24:00 得分 20
其实在微软的系统中有时用C++完全不能解决问题,那么这时候微软会修改其中的C++的一些东西。象COM就不能利用C++的类的继承来实现COM的继承,所以微软就想出了一个叫聚合等的东西来大概(注意是大概)地实现这个功能。这就是微软的风格,做不出来---改!
>>因为我看到有篇文章中提到:
>>MFC。从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder和Symantec >>C++同样可以处理MFC。
对于这个我不以为然。C++只是一种语言,象C一样只是说明它必须遵循一定的编程规则。但如果我要扩充C++的话,我会开发我的库,或者是我的类,你只有得到我的类的信息(象头文件,接口等你才可以用我的库)。你认为微软会把他的类信息告诉给别人吗?所以Borland C++,C++Builder等不能处理MFC也是情理之中的
Top
13 楼WindRiver(bigbird)回复于 2001-12-14 10:44:54 得分 20
to finalwish(gogo):
不知道,就别瞎说。Top
14 楼ygangy(还是多去海边走走舒服)回复于 2001-12-14 10:59:51 得分 20
我曾经看到过一些文章说过VC中的C++不一定完全遵循C++标准,而且至今为止还没有任何一家公司去完全遵循C++标准。所以我觉得我们不应去理会这些问题,MFC在一定程度上可用于BCB之类的但又不能被完全支持是理所当然的Top
15 楼coolstar(酷星)回复于 2001-12-14 11:14:43 得分 0
to finalwish(gogo):
你认为微软会把他的类信息告诉给别人吗?所以Borland C++,C++Builder等不能处理MFC也是情理之中的
好像可以吧Top
16 楼finalwish(gogo)回复于 2001-12-16 19:06:44 得分 0
哈哈,听听大家的高见 :-)
Top
17 楼flyingbugs(网际.神经病.心情很遭)回复于 2001-12-16 19:28:14 得分 50
不懂就不要乱说!!!!!!!!!!!!!!!!!!!
MFC的确是按照标准的C++实现的!!!!!!!!
定义宏 在标准C++中也是允许和很常见的!!!!
MFC只是有很多实现方法没有采用C++的机制!!如:按照C++,虚拟函数是实现消息映射的好方法,但由于虚拟函数实现需要占用较大资源,所以ms采用了利用macro来实现消息映射表,这样方便快捷,虽然,看起来好像不符合C++,但MFC的确没有添加任何非C++语法!!
再如:MFC中实现串化,采用的也是marco,但也没有超出任何C++的语法!!
所以说,MFC还是符合C++标准的!!
还有,BC以前准备是采用的虚拟函数实现消息映射的,但效率太低,灵活性也不如人意。后来采用了类似MFC的消息映射marco。
bcb就完全可以说不是C++了!它只是一个有着和C++相似的语法的dehpi。
有兴趣的话,去看看MFC的源代码!!!!
不要在这里争来争去的!! Top
18 楼coolstar(酷星)回复于 2001-12-17 09:49:39 得分 0
哈哈,flyingbugs(网际)说的不错啊Top
19 楼kamphkb(依栏望海)回复于 2001-12-18 21:39:28 得分 50
To flyingbugs(网际):
完全赞成,特别是:C++相似的语法的dehpi。俺怎么没想到这个说法哪?bcb居然擅自添加
关键字,vc当然不可能兼容之了。但mfc就反而可以被bcb编译,这正是mfc比较“标准”。
也因为mfc比较标准,编程人员不但心mfc过时后怎么办,这是mfc的生命力长久的原因吧。
像自己的类包装程度达到和mfc差不多的级别就比较合适,够用,性能消耗不大。ms的出
发点是轻快的解决问题,boland要的是优雅。不对之处请指正。Top




