免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: prolj
打印 上一主题 下一主题

弱问一下,VC2008支持C++98不?2005肯定不支持了。 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
21 [报告]
发表于 2009-04-21 01:09 |只看该作者
原帖由 皇家救星 于 2009-4-20 23:21 发表
stdint.h网上有VC版本的 可以百度一下


那个stdint.h 使用3-clause BSD授权。
我觉得不是很合理 ……  就一头文件 ……  
所以不爱用那个 ……  一般用MinGW中复制出来的, 只是有时候会有警告……


原帖由 皇家救星 于 2009-4-20 23:21 发表
for (int i = 0 ; i< n ; ++i )
i的生存周期在for里面应该是符合标准的
VC6.0中i的生存周期不符合标准,其它版本的都改正了


其他版本的VC对C++改正了, C还是不支持。

cl /TC filename
或者

cl filename.c
依然会报错。

也就是说, 它们还是不支持C99。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
22 [报告]
发表于 2009-04-21 01:17 |只看该作者
原帖由 太平绅士 于 2009-4-21 00:47 发表
这个总结的非常好,
如果有心写一些模板类的话,很容易碰到此类问题,
往往看到大段的出错讯息,也看不出所以然。有这个总结能避免好多问题。
csdn上几位嘲讽那位兄弟的家伙,看似不解风情。


csdn上有很多不求上进还喜欢乱喷的 ……

VC和gcc对标准的支持程度正在逐步缩小, 大家不应该再歧视VC了 ……

gcc也有一些让人不怎么爽的地方 …… 比如很保守的不使用寄存器传递this。
再比如最近遇到的一个 …… 也不完全算bug, 不过很令人吃惊的地方。

假设T1、T2是2个不同的类型, 并且它们都可以用作函数参数。
那么在某个名字空间下
void f(T1 );
void f(T2 );

相互构成重载, 算是深入骨髓的经验了。

可对某些T1、T2, gcc还就不认为它们是重载 ……

论坛徽章:
0
23 [报告]
发表于 2009-04-21 06:07 |只看该作者
原帖由 OwnWaterloo 于 2009-4-21 01:17 发表
gcc也有一些让人不怎么爽的地方 …… 比如很保守的不使用寄存器传递this。
再比如 ...

这是GCC特点使然。GCC是跨平台的,对寄存器的使用自然有较大的限制。

论坛徽章:
0
24 [报告]
发表于 2009-04-21 10:20 |只看该作者
原帖由 beepbug 于 2009-4-21 06:07 发表

这是GCC特点使然。GCC是跨平台的,对寄存器的使用自然有较大的限制。


我觉得用户接口跨平台就行了,没有必要下面的实现也跨平台。
个人感觉如果实现一级也跨平台的话,那多平台折中的结果就是性能大幅下降。当然,如果对性能没有要求的话,倒也无妨。
对this指针用寄存器传递,我觉得应该是属于非接口部分。毕竟编译出来的二进制代码是硬件平台相关的,所以二进制代码的具体操作进行硬件相关,也大无不可~~~~

论坛徽章:
0
25 [报告]
发表于 2009-04-21 12:18 |只看该作者
记得VC2008里边有开关控制是否支持C99(2005里边貌似也有),不过没用,大多数人都无视这个选项

甚至见过有人在C#里边用??Init@AA这种名字导入C++函数,所以关键不是微软是否支持标准,而是在于Windows下那帮程序员里听说过标准的人是极少数

论坛徽章:
0
26 [报告]
发表于 2009-04-21 12:38 |只看该作者

回复 #25 reiase 的帖子

这样导入全局函数还行,导入类成员函数就可能出问题……
一般是加上 extern "C" 修饰,再用 DEF 文件写好名字和序号。

论坛徽章:
0
27 [报告]
发表于 2009-04-21 12:52 |只看该作者
原帖由 langue 于 2009-4-21 12:38 发表
这样导入全局函数还行,导入类成员函数就可能出问题……
一般是加上 extern "C" 修饰,再用 DEF 文件写好名字和序号。


其实,我对这种行为持同情态度
万一某天要写个perl脚本啥的来处理这个文件,"??@"都是祸害啊

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
28 [报告]
发表于 2009-04-21 14:36 |只看该作者
原帖由 swxlion 于 2009-4-21 10:20 发表
对this指针用寄存器传递,我觉得应该是属于非接口部分。毕竟编译出来的二进制代码是硬件平台相关的,所以二进制代码的具体操作进行硬件相关,也大无不可~~~~


嗯, 我也这样觉得。
在x86下使用ecx传递, 而其他不支持的平台下采用其他方式, 也是可以的啊。 (也许gcc实现要多点工作, 但这是它的职责嘛)
反正编译出来的binary又不能跨平台使用的。

跨平台的是源代码, 源代码不应该依赖于this是否通过ecx传递。

就没什么问题了……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
29 [报告]
发表于 2009-04-21 14:37 |只看该作者
原帖由 reiase 于 2009-4-21 12:18 发表
记得VC2008里边有开关控制是否支持C99(2005里边貌似也有),不过没用,大多数人都无视这个选项


兄弟, 你一定要回忆起是哪个开关~~~ 谢谢啦~~~

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
30 [报告]
发表于 2009-04-21 14:41 |只看该作者
原帖由 langue 于 2009-4-21 12:38 发表
这样导入全局函数还行,导入类成员函数就可能出问题……
一般是加上 extern "C" 修饰,再用 DEF 文件写好名字和序号。


制作C++的binary库本来就是很不科学的事情。
binary库, 还是只提供C接口比较好。


原帖由 reiase 于 2009-4-21 12:18 发表
甚至见过有人在C#里边用??Init@AA这种名字导入C++函数,所以关键不是微软是否支持标准,而是在于Windows下那帮 ...


如上, 问题就结了。
被导入的那个C++函数的编写者, 是小白。

原帖由 reiase 于 2009-4-21 12:52 发表
其实,我对这种行为持同情态度
万一某天要写个perl脚本啥的来处理这个文件,"??@"都是祸害啊


同上, 你使用了小白编写的binary 。。。
怪不得你对C++链接有这么大意见 ……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP