测试环境:keil c51 + STC89C52
说明:

1.keil的不定参数只有15个字节
也就是说sizeof(...) 加起来总共不能超过15字节,否则会出错

2.当不定参数中有常数时,你也会得不到你想要的结果,字符串除外

例:
 unsigned char count_sec=2, count_min=3, count_hour=4;
 xdata char buf[12] = "";
 sprintf(buf, "%2d:%2d:%2d", count_hour, count_min, count_sec);
则转换完的结果是不正确的。
解决方式1:
unsigned char count_sec=2, count_min=3, count_hour=4;
改成:
unsigned int count_sec=2, count_min=3, count_hour=4;
相同的代码在VC6.0下却是正常,为何?
printf("%d\n",12);
printf("%d\n",1234);
/****************KEIL C51**************************/
143: printf("%d\n",12); 
C:0x098D 7BFF MOV R3,#0xFF
C:0x098F 7A0A MOV R2,#0x0A
C:0x0991 7902 MOV R1,#0x02
C:0x0993 75390C MOV 0x39,#0x0C
C:0x0996 12057D LCALL PRINTF(C:057D)
144: printf("%d\n",1234); 
C:0x0999 7BFF MOV R3,#0xFF
C:0x099B 7A0A MOV R2,#0x0A
C:0x099D 7902 MOV R1,#0x02
C:0x099F 753904 MOV 0x39,#0x04
C:0x09A2 753AD2 MOV 0x3A,#0xD2
C:0x09A5 12057D LCALL PRINTF(C:057D)

/******************VC++6.0***************************/
155: printf("%d\n",12);
00401628 push 0Ch
0040162A push offset string "%d\n" (00426034)
0040162F call printf (00411040)
00401634 add esp,8
156: printf("%d\n",1234);
00401637 push 4D2h
0040163C push offset string "%d\n" (00426034)
00401641 call printf (00411040)
00401646 add esp,8
/*************************************************/

这个时候你会发现,为什么keil c51会错了,因为它没有内存对齐
输入常数12的时候,占一个字节,他就给你分配一个字节,输入1234的时候占2个字节
他就给你分配两个字节
而VC++6.0就不一样了,你输入的常数起码都给分配4个字节,所以在你取数据的时候,
取四个字节就不会错了,keil呢,该取几个呢?不知道?所以数据会出错

参考自:http://hi.baidu.com/bnsd_/item/91d926c13a17f44ea8ba9467

最新文章

  1. NPOI操作EXCEL(五)——含合并单元格复杂表头的EXCEL解析
  2. getattribute()与getparameter()的区别
  3. POJ 3276 Face The Right Way 反转
  4. Comet、SSE、技术
  5. MongoDB安装、管理工具、操作
  6. 让PHP 5.3支持MSSQL连接
  7. js父窗口opener与parent
  8. vSphere文档中心
  9. wildcard
  10. 赵雅智_BroadcastReceiver
  11. 基本HTML5文件结构
  12. Balanced Binary Tree(Java代码没有结束,是什么原因???)
  13. Java代理模式汇总
  14. ROS学习记录(四)————怎样建立一个package包?
  15. cap deploy:setup报错
  16. 深入理解javascript中的事件循环event-loop
  17. SpringMVC返回json是设置编辑等消息头,消息头信息介绍(respone.setHeader,这个从网上获取)
  18. flutter 容器
  19. 题解 P1550 【[USACO08OCT]打井Watering Hole】
  20. 一些基本的操作,编译,构建,单元测试,安装,网站生成和基于Maven部署项目。

热门文章

  1. linux 用时间创建文件夹
  2. msfconsole 无法启动,解决办法
  3. PKUWC2019题解
  4. Wannafly挑战赛18C 异或和
  5. SSIS 控制流和数据流
  6. JetBrains全家桶使用攻略
  7. PageHelper分页插件使用
  8. JUC——延迟队列
  9. 使用request+Beautiful爬取妹子图
  10. Andorid Studio 模块化开发相关配置