初始化中的指针目标在签名方面有所不同

时间:2017-06-08 15:04:08

标签: c arrays string

我在使用ARM处理器的嵌入式主板上运行一些代码。我已经声明了这个字符串数组。

const int8_t *test_str[][3] = {
{"pa4",  "3", "A0"},
{"pa5",  "3", "A1"},
{"pa6",  "3", "A1"},};

我正在测试来自不同制造商的另一个ARM处理器上的代码,并且没有编译警告。但是如果我用我要使用的电路板编译它,我会得到以下警告

初始化中的指针目标在签名方面有所不同

该板是ST32F0 ARM器件。我真的错过了宣言中的某些内容吗?

由于

1 个答案:

答案 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可以是有符号或无符号的,因此您无法创建一个可移植的代码,强制将字符串文字生成的指针放入charint8_t,而无需额外强制转换。

uint8_t更改为const int8_t会使指针类型匹配,但元素的类型将不再是const char