日历
网志分类
展开全部
· ***    All     ***
· ***    Mood    ***
· ***    Life    ***
· *** Technology ***
· ***     Yc     ***
· ***  Cartoon   ***
· *** Collection ***
· ***  Unsorted  ***
媒体播放器

Get the Flash Player to see this player.
SkyDrive is currently not available.

站内搜索
友情链接
· 我的歪酷 非非共享界
· 风雨妖虹
· kingbeful@csdn
· 手心的太阳@瞬间十年
· Moment@Travis
· 江南麒麟居
· εз毛线团εз
· 乌拉的neverland
· 碾过的日子 闲也陶陶
· 狡兔三窟 *^.^*
· 橄榄林的风
· 水色の街
· Powerful and delicate, Life struggling
· 阿德咖吧
· 陷阱
· 风之华
· vkobe的Neverland@@
· 白日梦已死 · 伤越夜海
· 望天
· 空の軌跡
· 没什么好东西的空间
· 心情...咖啡屋
· 随风独自凉
· Some where i belong
· .★·°双晨·故事°☆ .
· BigWorld的记事本
· *Sara's*
· 人生若只如初见
· 宠辱不惊闲看庭前花开花落·去留无意漫随天外云卷云舒
· 我思我不在
· 飞扬飘雨
· lazy的猫猫
常用链接
· [Google]
· [Google Accounts]
· [IT Items]
· [Telnet@Yanxi]
· [Wikipedia]
· [Linux Manpages]
· [Mofile.com]
· [163888.net]
· [fm.qq.com]
· [Proxy]
· [Animepaper.net]
· [FreeproxySite]
· [gonwan@fc2]
· [skydrive.live.com]
· [gonwan@lifelogger]

订阅 RSS

0109800

歪酷博客

逆さまの蝶
In this Craziness
Uncertainy
一人一人の想いを
僕らは何処かに遺せるだろうか

In this Craziness
You gave me life
一つの想いを
僕らは何処まで守れるだろうか



« 上一篇: 最近看的书 下一篇: Cross-platform Development in C/C++ (4) »
丸子·酱 @ 2008-08-25 13:53

    先来看下面的code:
==============================
#include <string.h>
#include <io.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
    open("a.txt", O_TEXT);
    char c[30] = { 0 };
    strcpy(c, "hihi~");
    return 0;
}
==============================
    vs2005编译结果:
1>.....\main.cpp(6) : warning C4996: 'open': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _open. See online help for details.
1>        c:\program files\microsoft visual studio 8\vc\include\io.h(328) : see declaration of 'open'
1>.....\main.cpp(8) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 8\vc\include\string.h(74) : see declaration of 'strcpy'

    用vs2005的应该都碰到过的. 下面来逐一分析, vs2005的新library为什么会有这个warning以及对于cross-platform的影响.
*) strcpy() --> strcpy_s()
    这是一个security的扩展函数, 后者比前者多了一个buffer的大小参数. 如果buffer overflow的话, 据说是会有特别的error handler, 默认的strcpy()则直接告诉你access violation.
    关于这个东西还有一堆的macro用来控制, 还非常的难记. 所以这个扩展其实并没有很大的用处.
*) open() --> _open()
    open()是POSIX标准的兼容函数, 而_open()则不是, 而且放到linux下编译是绝对通不过的.
    那为什么还说是“ISO C++ conformant”呢? 这里有篇帖子非常的详细, 主要的发言人P.J. Plauger就是当初实现C语言的几个人之一.
    大概意识就是说: 原来的open()确实是为了调用的方便, 就像普通的函数一样. 现在iso标准说, global的函数统统都要用"_"来开头, 所以M$就照做了, 还加了这个warning. 可是我觉得还是没有必要的=v=... 严重妨碍cross-platform.
    看CRT的源码, 其实M$一直实现的都是_open()这个函数, open()一直只是一个函数原型. 最后也没有typedef一把, 而是通过一个linker的trick来实现(__cdecl的calling convention).

    总之, 我决定无视这两个warning, 直接#pragma warning(disable: 4996) 就一切清净了.


曾经的这一天...



评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定