首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > "危险"的函数指针类型的强制转换
【标  题】:"危险"的函数指针类型的强制转换
【关键字】:
【来  源】:http://www.cppblog.com/Kooyu-Gql/archive/2007/03/07/19358.html

"危险"的函数指针类型的强制转换

查看一个与别人合作的项目的代码,发现了一个“隐秘”的问题,模拟这个问题如下:

typedef?void?( * foo_type)( int ,? int );

void?foo1(
int ,? int )
{
}

void?foo2()
{
}

int ?main()
{
??foo_type?f?1
= ? & foo1;??????????????????????// <1>
??foo_type?f?2
= ?(foo_type) & foo2;?? // <2>
???? return 0;
}
语句<1>肯定是对的,语句<2>强转一个函数类型到foo_type类型,我当时担心这会不会导致下面的语句导致运行时错误:
(*f2)(1,2);

幸运时这里它不会导致错误,这是由于:
<1>我们使用C/C++的默认函数调用方式__cdecl,也就是传入的函数参数是由调用者清理的;
<2>函数foo2没有使用任何参数。
这种做法肯定不值得提倡,但实际的项目中要避免还是不太容易,毕竟每个人的习惯不一样,还有为了与框架协同工作,有时候可能也不得不这样做。但是,一旦函数调用方式发生改变,或者被强转的那个函数是带参数的,而它又使用了这些参数,隐秘的错误也就埋下了。

一套未完成得skin界面库续(2):【上一篇】
痛苦,证明活着。(转):【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Visual C++程序调试方法入门(zz)
  • 什么是配件(assembly)?
  • SQL注入基础:SQL语句导入导出大全
  • 不知道程序的窗口句柄时结束该程序的进程
  • 在ASP中自动创建多级文件夹的函数(使用FSO)
  • 在HP-UX上实现用户空间限制
  • 全能服务器安装手册之更新记录及版权声明
  • 七、函 数
  • 郁闷中
  • JEDI Code Format Integration Expert 1.0 for Delphi 2005
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.