我将linux的代码,放到win 7下的cygwin里进行编译和执行。 死的比较难看。跟踪到的错误,实际是在三个平台上存在两种不同的情况。
mac os 下,apple llvm 5.0 , sizeof(va_list) == 24
(ubuntu) linux 下,gcc 4.8.2 , target x86_64-linux-gnu ,sizeof (va_list) == 24
cygwin(win7)下, gcc 4.8.3 ,target x86_64-pc-cygwin,sizeof (va_list) == 8
即便makefile 的 CFLAGS 增加 -D_M_ALPHA ,仍然无效,现在只能通过把 va_list ,va_start 等等用宏裹一层的方式,自定义选择性的实现。
是否与靠谱的方式,通过cygwin的gcc的参数配置,让 sizeof(va_list) == 24 。
有段时间没有在win下玩代码了。。。。把这个差异忘记了。cygwin里的坑但愿只有一个。。。。。。
有跌过爬出来的,给个比较规范的方法(非自行定义宏开关实现),多谢。
补充说一句,抓这个bug,mac os ,ubuntu ,win7+cygwin 三个平台同时测,体验度 mac os (这是生活),ubuntu (这是工作), win7+cygwin(这是坐牢)。。。哈不起来了,shit一把。。。。
补充总结下问题的描述,“win ,cygwin 下, va_list 被定义成char *,而 mac linux上不是如此,怎么解决按照mac os 或linux的方式编写的代码,对于va_list 在cygwin下不被定义成char *”,两种类型定义方法,对相同代码可能引发错误。
这么晚了,我是来帮顶的。。。。真心不会C######回复 @中山野鬼 : Microsoft认为自己就是标准。######多谢多谢。。。。。。。。。真心想不出windows为什么这么变态不按posix的标准走。。。。。######留名,php是最好的语言→_→######va_list 是个啥东西啊。######这是win的问题还是cygwin的问题啊?######
WIN下,是直接使用可变参存储的指针的,这个我以前有影响,va_list params;这个参数传入子函数出来,是不变的。。。mac和linux下,va_list是一个结构体,实际可变参存储的指针是在结构体内的,所以params传入后,子函数对可变参的调整是可以在其他函数中体现出来的。
我怀疑8成是cygwin的错误。。。
######和系统有关系,MAC OS 和 Linux 是64位的,Windows 可能是 32 位的,确定是否用了64位的系统和编译器...
######回复 @ZeroOne : 32bit 应该是 4,抱歉,我看错了,windows下面是char *######就算是32位吧,那结果也不应该是8,而应该是12。。。######和系统有关系,MAC OS 和 Linux 是64位的,Windows 可能是 32 位的,确定是否用了64位的系统和编译器...
一个指针的sizeof是8个byte,难道32位有这个功能吗?哈。
sizeof(va_list) == 8 ,意思是说,他采用了
typedef char * va_list;
的方式定义,而mac 和 linux 下,显然不是这么定义。。。
######鬼鬼,
是否和字节对齐方式有关系?
既然va_list是一个struct.
这里有一篇百度知道不晓得是否有用: http://zhidao.baidu.com/link?url=oCUdbozYmFqCVfyNgZ0T1_Tl0xjMHxzNszyiVHJXOgpk_XNDP50W8WipJaeBYwjW8_lClEjTcgs2srnIP9C-_aurl=oCUdbozYmFqCVfyNgZ0T1_Tl0xjMHxzNszyiVHJXOgpk_XNDP50W8WipJaeBYwjW8_lClEjTcgs2srnIP9C-_a
windows是不允许重新定义
和系统有关系,MAC OS 和 Linux 是64位的,Windows 可能是 32 位的,确定是否用了64位的系统和编译器...
一个指针的sizeof是8个byte,难道32位有这个功能吗?哈。
sizeof(va_list) == 8 ,意思是说,他采用了
typedef char * va_list;
的方式定义,而mac 和 linux 下,显然不是这么定义。。。
抱歉,我知道,因为两个的ABI接口定义不一样,所以定义的有所不同,不过这应该不影响其va_list的使用,如果使用方式正确的话,我觉得把你使用的这部分代码贴出来,看看会好一点
鬼鬼,
是否和字节对齐方式有关系?
既然va_list是一个struct.
这里有一篇百度知道不晓得是否有用: http://zhidao.baidu.com/link?url=oCUdbozYmFqCVfyNgZ0T1_Tl0xjMHxzNszyiVHJXOgpk_XNDP50W8WipJaeBYwjW8_lClEjTcgs2srnIP9C-_aurl=oCUdbozYmFqCVfyNgZ0T1_Tl0xjMHxzNszyiVHJXOgpk_XNDP50W8WipJaeBYwjW8_lClEjTcgs2srnIP9C-_a
windows是不允许重新定义
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。