You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C99标准下const数组传入const指针形参的合规性验证

结论

你的理解完全符合C99标准规则,对应的调用不存在语法错误,你遇到的报错是ColdFire 5703 MCCCF旧编译器的实现缺陷导致的。

标准规则依据

根据C99的规定,你提到的两个核心逻辑都是成立的:

  • 除了作为sizeof、_Alignof、一元&运算符的操作数这三种特殊情况外,数组类型的表达式会自动隐式转换为指向数组首元素的指针。你将array作为函数实参传递的场景满足转换条件,此时array等价于&array[0]。
  • 你定义的array元素类型为const unsigned char,因此首元素的指针类型自然就是const unsigned char *,和func的形参类型完全匹配,不存在类型不兼容或者const限定符违规的问题。
旧编译器兼容方案

针对这类对C标准遵循度较差的嵌入式老旧编译器,你可以通过添加显式强制类型转换来规避误报,该操作是完全安全的,不会引入未定义行为:

func((const unsigned char *)array);

内容的提问来源于stack exchange,提问作者Guillaume Petitjean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:15:06