找回密码
 立即注册
查看: 3188|回复: 7

stc32编译警告是什么原因

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:140
  • 最近打卡:2025-05-01 07:27:12

1

主题

2

回帖

800

积分

高级会员

积分
800
发表于 2023-3-3 11:11:02 | 显示全部楼层 |阅读模式
本帖最后由 jingboxu 于 2023-3-3 11:13 编辑


在官方演示程序中“37-2.4寸ILI9341驱动TFT显示屏实验程序“编译报告警告

..\GUI\gui.c(469): warning C188: 'parameter 2': value truncated
..\GUI\gui.c(479): warning C188: 'parameter 5': value truncated

请教这个是官方演示程序中的编译时警告是什么原因?

请教这个是官方演示程序中的编译时警告是什么原因?

请教这个是官方演示程序中的编译时警告是什么原因?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-3-3 11:20:12 | 显示全部楼层
提示传递参数类型跟函数定义不一致,参数内容可能会被截取。
例如将16位变量传递给8位类型参数的函数,那么高8位数据被截取,只传递低8位数据到函数。
  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-05-01 19:17:52
已绑定手机

19

主题

208

回帖

492

积分

中级会员

积分
492
发表于 2023-7-9 09:29:18 | 显示全部楼层
关于C188警告的详细测试程序段, 按照指示添加并编译后就可以在KEIL C251中进行软件仿真测试(ctrl+F5):
显示强制类型转换操作 可以消除 C188 告警,但是使用者需要自己当心转换中数据截断操作是否满足自己的要求!

//将以下程序行添加到一个C251工程中的 main.c 中的 #include <xxx>之后,且是main()函数之外
//变量定义
u8        u8_i, u8_k;
u16        u16_k;

//函数声明
u8        add_x_y(u8 x);
u16        add1_x_y(u16 x);

//函数代码
u8        add_x_y(u8 x)
{
        return(x+1);
}

u16        add1_x_y(u16 x)
{
        return(x+1);
}

//将以下程序行添加到一个C251工程中的 main()函数中的 RSTFLAG |= 0x04; 之后
//测试 L188 的程序段
        u8_i = 1;
        u8_k = add_x_y(u8_i+1);        //这里回产生 C188 编译警告, 是因为C251编译器默认是常数 1 为 双字节类型,而函数调用定义的参数类型是u8,存在数据截断,故产生警告!
                                                //运行结果  u8_k =3 正确
       
        u8_k = add_x_y((u8)(u8_i+1));        //这里对(u8_i+1)先行进行显式强制类型转换,则不会产生 C188 编译警告
                                                //运行结果  u8_k =3 正确
       
        u8_i = 1;
        u16_k = add1_x_y(u8_i+0x1234L);        //这里参数值相加后有效数值实际也是u16类型,不会产生数据字节的截断,则 不 会产生 C188 编译警告
                                                                //运行结果  u16_k =0x1236 正确

        u16_k = add1_x_y(u8_i+0x12345678L);        //这里参数值相加后已经是4字节,而函数调用定义的参数类型是u16,存在数据截断,故产生 C188 警告!
                                                                //运行结果  u16_k =0x567A 正确
                                                                                               
        u16_k = add1_x_y((u16)(u8_i+0x12345678L));        //这里参数值相加后已经是4字节,而函数调用定义的参数类型是u16,由于存在显式强制类型转换,则不会产生 C188 编译警告
                                                                //运行结果  u16_k =0x567A 正确
////

//END OF ALL
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:412
  • 最近打卡:2025-05-01 03:39:21

2

主题

144

回帖

3012

积分

论坛元老

积分
3012
发表于 2023-11-24 14:31:49 | 显示全部楼层
我也遇到了和UP同样的问题,按几位的方法,我也修改成功了。

修改点

修改点
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:412
  • 最近打卡:2025-05-01 03:39:21

2

主题

144

回帖

3012

积分

论坛元老

积分
3012
发表于 2023-11-24 14:34:43 | 显示全部楼层
机灵*** 发表于 2023-7-9 09:29
关于C188警告的详细测试程序段, 按照指示添加并编译后就可以在KEIL C251中进行软件仿真测试(ctrl+F5):
显 ...

用实例证明:这样分析的非常仔细,点赞点赞
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:207
  • 最近打卡:2025-05-01 12:22:36

1

主题

63

回帖

355

积分

中级会员

积分
355
发表于 2024-5-16 21:36:24 | 显示全部楼层
强制转换有效,不知道,如果不管会不会出现什么bug。
强制转换前,137行会报警告
截图202405162135077728.jpg
137行强制转换后,消除了137行的警告

截图202405162134379676.jpg




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:385
  • 最近打卡:2025-05-01 08:05:45

25

主题

113

回帖

725

积分

高级会员

积分
725
发表于 2025-1-26 09:07:27 | 显示全部楼层
今天也遇到同样的问题。根据楼上的方法找到警告原因。非常感谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-15 00:04:48
已绑定手机

0

主题

1

回帖

30

积分

新手上路

积分
30
发表于 2025-3-15 00:04:48 | 显示全部楼层
可以用#pragma warning disable = 188 在头文件里来屏蔽这个警告,我移植个东西报100多个这玩意儿给我整崩溃了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:28 , Processed in 0.142640 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表