keil编程遇到warning C151: pointer truncation: 'far' to 'code'错误,网上和GPT暂时没找到解决方法,先记录一下。
使用嵌入式平台为STC32G12K128,编写一个哈希查表时遇到这个问题,错误的大致原因是一个32位的far指针被转换成16位的code指针被截断,可能会出现错误。
关键代码:
在.h文件中定义了一个带long类型传入参数的函数指针类型,用该类型声明了一个函数指针数组,声明了一个哈希值注册函数,
h文件:
typedef void (*FuncPtr)(long); //自定义函数指针类型
extern FuncPtr xdata funcs[Hashlenth]; //哈希表外部变量声明
unsigned char RegisterFunc(char *str, FuncPtr func); //哈希值注册函数声明
.c文件中用自定义类型定义了一个函数指针数组,并写了哈希注册函数的实现方法
c文件:
FuncPtr xdata funcs[Hashlenth] = {NULL}; //定义了一个函数指针哈希表
unsigned char RegisterFunc(char *str, FuncPtr func){} //哈希值注册函数实现方式
然后编译的现象为:
只要
unsigned char RegisterFunc(char *str, FuncPtr func);
的函数声明写到了
FuncPtr xdata funcs[Hashlenth]