免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hahasasa

怎么理解这个 *(void **)(&cosine) ? [复制链接]

论坛徽章:
0
发表于 2008-07-18 00:08 |显示全部楼层
存在就有道理~~~~~~~~~~~~man 手册写的代码肯定是考虑到很多标准的,
C本身就有好多标准,不同的编译器也会产生不同行为,linux,unix下编译器不只是有一个gcc

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2008-07-18 21:45 |显示全部楼层
原帖由 ice-pl 于 2008-7-18 00:07 发表
The ISO C standard does not require that pointers to functions can be cast back and forth to pointers to data. Indeed, the ISO C standard does not require that an object of type void * can hold a pointer to a function. Implementations supporting the XSI extension, however, do require that an object of type void * can hold a pointer to a function. The result of converting a pointer to a function into a pointer to another data type (except void *) is still undefined, however. Note that compilers conforming to the ISO C standard are required to generate a warning if a conversion from a void * pointer to a function pointer is attempted as in:

fptr = (int (*)(int))dlsym(handle, "my_function");

OK, in this case I'm wrong!

不按照原来的方式转换,不论是直接把类型转换信息去掉,还是把类型转换信息放在右边,用如下方式编译都会出现警告:
gcc -pedantic --std=c99
默认情况下 gcc 并不是严格按照 ISO C 标准来的。

[ 本帖最后由 MMMIX 于 2008-7-18 21:50 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2008-07-18 21:49 |显示全部楼层
原帖由 ice-pl 于 2008-7-18 00:08 发表
存在就有道理~~~~~~~~~~~~man 手册写的代码肯定是考虑到很多标准的,

才注意到楼主引用的是 dlopen manual 中的代码 这种情况手册中应该有说明的。

论坛徽章:
0
发表于 2008-07-23 09:52 |显示全部楼层
*(void **) (&cosine) = dlsym(handle, "cos");

乱七八糟的强制转换.......带有个人风格.............

C标准不推荐这么用....否则大家也不会迷惑了

论坛徽章:
0
发表于 2008-07-23 10:24 |显示全部楼层
原帖由 FreeB_U 于 2008-7-23 09:52 发表
*(void **) (&cosine) = dlsym(handle, "cos";

乱七八糟的强制转换.......带有个人风格.............

C标准不推荐这么用....否则大家也不会迷惑了



这是 manpage 里面的……

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2008-07-23 20:45 |显示全部楼层
原帖由 FreeB_U 于 2008-7-23 09:52 发表
*(void **) (&cosine) = dlsym(handle, "cos");

乱七八糟的强制转换.......带有个人风格.............

C标准不推荐这么用....否则大家也不会迷惑了

This is the only way...

论坛徽章:
0
发表于 2008-07-24 12:54 |显示全部楼层
我刚吃过饭,看完,感觉又饿了...

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
发表于 2012-07-01 11:53 |显示全部楼层

*(void **) (&cosine) = dlsym(handle, "cos");

这个能拆分成多行吗? 可读性不行啊。

论坛徽章:
0
发表于 2012-07-02 09:45 |显示全部楼层
表示路过,学习学习。。

论坛徽章:
0
发表于 2012-07-04 15:27 |显示全部楼层
我的系统是RHEL5, 手册里直接就是这一句:
cosine = dlsym(handle, "cos");
很奇怪楼主看的哪里的手册?

还有,大家讨论得出的什么结论呢?没看懂。。。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP