【发布时间】:2016-06-01 06:19:24
【问题描述】:
代码:
int8_t ret;
int8_t buf[8];
bytes_written = snprintf(buf, 8, "%" PRId8, 2);
警告:
warning: pointer targets in passing argument 1 of ‘snprintf’ differ in signedness [-Wpointer-sign]
bytes_written = snprintf(buf, 8, "%" PRId8, 2);
^
/usr/include/stdio.h:386:12: note: expected ‘char * __restrict__’ but argument is of type ‘int8_t *’
extern int snprintf (char *__restrict __s, size_t __maxlen,
我知道这可以通过将 buf 作为 *char 来解决,但是
int8_t 是 typedef 为 unsigned char
使用预处理器输出检查,即gcc main.c | grep int8_t
那么为什么编译器无法理解呢?
使用 buf as uint8_t 我也会收到相同的警告。
编辑:
int8_t 是 typedef 为 signed char (我在原帖中误写为 unsigned)
【问题讨论】:
-
什么是
PRId8。对snprintf的调用不应该是bytes_written = snprintf(buf, 8, "%PRId8", 2);吗? -
@Nishant 不,
PRId8是 CPP 宏。 -
@a3f Aah :) 不,CPP 是 C++ 的缩写。
-
@Nishant 不,那部分是正确的。看看this SO post
-
@alk 所以G++预处理器叫CPPPP?