当前位置: 首页 > news >正文

一个关于TCHAR的离奇bug

最近解了一个超级让人faint的bug。 一个成员函数f()明明修改了一个成员变量a,可是执行完一看,压根就没改。debug的时候也看不出啥问题,进这个函数f的时候是看着改了,一离开这个函数,a的值还是修改前的值。

我又研究了十几分钟,终于看出了原因。该成员函数是父类B的,子类C继承了B。B类的定义里,简化一下,就是这样的:

class B

{

TCHAR str[MAXLEN];

int a;

int f(int n){a = n;}

};

结果,B在编译的时候没有定义unicode宏,而C类编译的时候定义了unicode。于是TCHAR在这两类中分别被替换成了char 和 wchar_t, 导致a的偏移值不同。而f又恰恰是个内联的函数,子类父类各自有自己的一段f函数的代码。于是,子类的代码里f修改的a在父类看来根本不知道是啥地方了,而父类的a那个位置的变量根本没变。

由此可见,使用TCHAR是要多么的小心啊,宏实在够危险。

还有,父类和子类编译的参数也要小心设置才行。

相关文章:

  • C# 使用Xamarin 开发应用 -- 切换Activity
  • Vsual Studio2005打开速度很慢的超级解决方案
  • OO系统分析员之路--用例分析系列(7)--用例规约的编写--业务规则和实体描述[整理重发]...
  • 批量删除多台服务器上的漫游用户配置文件
  • div 长度固定 文字太长实现自动换行
  • 金旭亮博客之“Web开发技术”资源主页
  • TPL Part3 -- 数据共享
  • 如何做软件项目的需求分析....
  • C# Asp.net MVC 分页时传参场景 动态生成QueryString
  • [Windows编程] 使用API函数GetProcAddress的注意事项
  • TPL Part 4 -- Task的协同
  • [Windows编程] SHLWAPI 和 CRT (C Runtime) 字符串处理函数的区别
  • SSH用户等效性配置
  • TPL Part5 -- 循环和PLINQ
  • 再说Ucweb
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Git同步原始仓库到Fork仓库中
  • JS题目及答案整理
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • React Transition Group -- Transition 组件
  • React中的“虫洞”——Context
  • Redis 懒删除(lazy free)简史
  • Twitter赢在开放,三年创造奇迹
  • 大主子表关联的性能优化方法
  • 关于for循环的简单归纳
  • 近期前端发展计划
  • 京东美团研发面经
  • 区块链技术特点之去中心化特性
  • 数据结构java版之冒泡排序及优化
  • 我看到的前端
  • 字符串匹配基础上
  • ​flutter 代码混淆
  • ​Spring Boot 分片上传文件
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (四)Linux Shell编程——输入输出重定向
  • (一) storm的集群安装与配置
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Standard 的管理策略
  • .NET学习全景图
  • [Angular 基础] - 指令(directives)
  • [C/C++] -- 二叉树
  • [CentOs7]iptables防火墙安装与设置
  • [CSS3备忘] transform animation 等
  • [Django 0-1] Core.Email 模块
  • [docker]docker网络-直接路由模式
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练