修改时间:2021.06.01 10:35

使用环境:Windows10 gcc arm-gcc

开门见山

char类型为标准整数类型,与系统位数无关,char类型始终占据1个字符长度,也就是8位长度,则对于无符号数来说,其可以表示0至255;而对有符号数来说,其可以表示-128至127。这三种类型的对象在存储介质中的表现形式是一样的,只是解析的结果不同。

对于MSVC编译器及x86平台的gcc编译器而言,默认的char为有符号数,也就是signed char;而对于arm平台的gcc编译器来说,char却被定义为无符号数unsigned char,这就导致了相同的代码在PC端与ARM端可能会出现不同的运行结果,甚至无法通过编译。

解决方案

清晰定义变量类型

在编码时写明所使用的char为signed char或unsigned char,以避免编译器使用默认配置进行编译。

配置编译参数

使用编译参数-funsigned-char使编译器将char视为unsigned char

使用编译参数-fsigned-char使编译器将char视为signed char

分类: 软件开发