2010-04-07 36 views
0

与MVS2008,该行正常工作:_fsopen在用Borland C C++ BuilderX的2003年和MVS2008

_fsopen(file_name, "wb+", _SH_DENYRW); 

的Borland C++ BuilderX的从2003抱怨的说法_SH_DENYRW。我改为

_fsopen(file_name, "wb+", SH_DENYRW); 

删除下划线和Borland现在编译好了。我在做什么好?我在网上的某个地方看到了这种修改。

非常感谢..

回答

0

微软已经通过位随着时间的推移,使他们的C/C++头文件使用的名称工作位和库更符合标准(尽管他们不一定做同样的名字在SDK头文件和库中 - 一个微妙但重要的区别)。所以你会发现越来越多的不符合标准的名字会以下划线作为前缀。

但MS通常提供使用旧的非标准兼容名称来实现向后兼容性的功能。你应该能够在任何MSVC或Borland的使用SH_DENYRW名称,除非你告诉编译器使用严格的标准符合性(例如,与/Za选项),因为MSVC定义share.h如下:

#if  !__STDC__ 
/* Non-ANSI names for compatibility */ 
#define SH_DENYRW _SH_DENYRW 
#define SH_DENYWR _SH_DENYWR 
#define SH_DENYRD _SH_DENYRD 
#define SH_DENYNO _SH_DENYNO 
#endif 

#endif /* _INC_SHARE */ 
+0

感谢这个有趣的信息。 SH_DENYRW与Borland合作很好。我现在明白SH_DENYRW也可以和MSVC一起工作,尽管我还没有尝试过。 – yCalleecharan 2010-04-07 20:22:29