在使用 PIC24FJ128GB204 在 MPLAB X 中工作时学习嵌入式 C。
到目前为止,我大多听说应该在嵌入式设备上尽可能多地使用无符号类型(尤其是?),所以我开始使用 uint8_t 数组来保存字符串。但是,如果我从 stdlib.h 调用 itoa,它需要一个指向有符号字符 (int8_t) 数组的指针:
extern char * itoa(char * buf, int val, int base);
当我在无符号数组上使用 itoa 后尝试编译时,这一点特别清楚:
main.c:317:9: warning: pointer targets in passing argument 1 of 'itoa' differ in signedness
c:\program files (x86)\microchip\xc16\v1.36\bin\bin\../..\include/stdlib.h:131:15: note: expected 'char *' but argument is of type 'unsigned char *'
在其他平台上搜索 itoa 的实现,这似乎是常见的情况。
这是为什么?
(我还注意到,大多数实现都需要值/指针/基数,而-出于某种原因-Microchip 的 stdlib.h 首先需要指针。我花了一段时间才意识到这一点。)