我在使用ARM处理器的嵌入式主板上运行一些代码。我已经声明了这个字符串数组。
const int8_t *test_str[][3] = {
{"pa4", "3", "A0"},
{"pa5", "3", "A1"},
{"pa6", "3", "A1"},};
我正在测试来自不同制造商的另一个ARM处理器上的代码,并且没有编译警告。但是如果我用我要使用的电路板编译它,我会得到以下警告
初始化中的指针目标在签名方面有所不同
该板是ST32F0 ARM器件。我真的错过了宣言中的某些内容吗?
由于
答案 0 :(得分:3)
C中的字符串文字具有类型vals <- rowSums(expand.grid(0:2, 0:2))
x <- rep(1:5, 9)
m <- matrix(pmax(x, vals[rep(1:9, each = 5)]), nrow = 5)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
# [1,] 1 1 2 1 2 3 2 3 4
# [2,] 2 2 2 2 2 3 2 3 4
# [3,] 3 3 3 3 3 3 3 3 4
# [4,] 4 4 4 4 4 4 4 4 4
# [5,] 5 5 5 5 5 5 5 5 5
,其中char[len]
表示文字中的字符数加上一个用于空终止的字符数。
由于len
可以是有符号或无符号的,因此您无法创建一个可移植的代码,强制将字符串文字生成的指针放入char
或int8_t
,而无需额外强制转换。
将uint8_t
更改为const int8_t
会使指针类型匹配,但元素的类型将不再是const char
。