mfl*_*ris 2 c enums gcc arm sizeof
我正在从Linux x86机器上的工作编译开始将net-snmp移植到ARM平台(ThreadX OS,而不是linux)
现在程序在init_snmp()函数内崩溃,因为在某些时候内存会发生可怕的事情.
然后我面对sizeof()所有数据类型,发现enum在Linux x86上是4个字节,在ARM上是1个字节.
是否有可能这种不匹配会对内存分配造成严重破坏?尝试将字符串写入内存时程序崩溃.
如何在ARM上强制枚举为4字节大?
我正在用gcc arm-none-eabi编译
Lun*_*din 7
是否有可能这种不匹配会对内存分配造成严重破坏?
哦,是的.
C标准表示枚举变量可能具有任何几乎任何整数类型,大小和签名是实现定义的.因此,枚举通常是有问题的,特别是在嵌入式系统中.这是C语言的一个已知缺陷.
您可以强制enum具有特定编译器的特定大小,但这只是一个快速而肮脏的修复.
专业的长期解决方案是重写所有代码,以便在任何地方都不依赖于枚举的大小或签名.
归档时间:
9 年,2 月 前
查看次数:
587 次
最近记录: