【踩坑】修改头文件 stdint.h

前言

这里说踩坑似乎不合适,应该是自己坑自己,不过还是应当记录下来,时时刻刻提醒自己!


踩坑描述

不同项目对 int、unsigned int等数据类型会使用 typedef 为这些数据类型定义一个新的名字,这样在移植项目的过程中,如果不想大规模的改动源码,则需要自己在头文件中依据修改的名字自己用 typedef 声明一下。

我在移植一个开源项目时,这个项目的数据类型我自己的工程是没有的,所以没多想,动手就在 Keil 中右键跳转到已经存在的数据类型的头文件,当时没注意这个头文件的名字是 stdint.h,在声明完开源项目的数据类型后,编译也不会报错。结果就是这样一个小改动,自己埋下了深坑😭,每次想起都觉得十分不应该!

最关键的 unsigned long long 类型居然被我写错,写成 __INT64 直接就变成了 long long 类型,后面运行的时候总是挂掉,单步调试的时候总是在将数据转换的时候挂掉,要么指针跑飞要么栈溢出的,调了整整快一个星期,后面还以为是电脑的大小端和 cortexM3 的大小端不一致导致的,调整了数据转换后,虽然不会运行的时候挂掉,但是总是会返回出错。

最后还是大佬在旁边帮我单步调试发现的数据类型声明的问题,被无情的打脸和嘲讽后,修正了问题,最后运行的时候一遍就通过了。😭

这里主要是两点错误:

  • 1. 是修改了非本工程的文件,修改了标准 C 库的文件 stdint.h,这些标准 C 库的文件可能在很多地方都有用到,一般不能随意更改的。
  • 2. 是使用 typedef 为数据类型另起名字的时候,居然将数据类型写错了!

解决问题

最后 copy 别人电脑下的stdint.h 文件,将自己修改的替换后,在自己工程的数据类型声明头文件中,添加开源代码中的数据类型后,问题解决!这是一个粗心大意给自己制造的 BUG,付出了血的教训,故此记录下,提醒自己!


扩展

【踩坑】notepad++ Hex-Editor