Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 注:预计为&x2018;字符*uuu限制uu’;但参数的类型为‘;int8_t*’;_C_Gcc - Fatal编程技术网

C 注:预计为&x2018;字符*uuu限制uu’;但参数的类型为‘;int8_t*’;

C 注:预计为&x2018;字符*uuu限制uu’;但参数的类型为‘;int8_t*’;,c,gcc,C,Gcc,代码: 警告: int8_t ret; int8_t buf[8]; bytes_written = snprintf(buf, 8, "%" PRId8, 2); 我知道这可以通过将buf作为*char来解决,但是 int8_t的类型定义为无符号字符 使用预处理器输出进行检查,即gcc main.c|grep int8_t 那个么为什么编译器不能理解这一点呢 当buf作为uint8时,我也得到了同样的警告 编辑: int8_t是typedef作为有符号字符(我在原始帖子中错误地写为unsig

代码:

警告:

int8_t ret;
int8_t buf[8];
bytes_written = snprintf(buf, 8, "%" PRId8, 2);
我知道这可以通过将buf作为*char来解决,但是

int8_t的类型定义为无符号字符

使用预处理器输出进行检查,即
gcc main.c|grep int8_t

那个么为什么编译器不能理解这一点呢

当buf作为uint8时,我也得到了同样的警告

编辑:

int8_t是typedef作为有符号字符(我在原始帖子中错误地写为unsigned)


sprintf
调用系列需要一个
char*
缓冲区来写入数据

您当前将其命名为
int8*
(一个有符号的8位值),并且它抱怨类型的有符号性这一事实几乎肯定意味着裸
char
在您的系统上是无符号的(该标准对
char
是否是有符号类型保持开放)或者说,
gcc
足够聪明地意识到这可能是其他编译器的可移植性问题

请注意,这是一个警告,因此它可能仍然有效。然而,我喜欢清理这样的代码,以便让我的生活更轻松


当然,修复方法是使用正确的类型(将类型更改为
char buf[8]
,或者在
snprintf
调用中显式强制转换它,从而告诉编译器您知道自己在做什么)。

什么是
PRId8
。如果对
snprintf
的调用不是
bytes\u writed=snprintf(buf,8,“%PRId8”,2)?@ NISANT NO.<代码> PRID8是CPP宏。@ A3F AA::不,CPP是C++的缩写。@ NIANTENT没有那部分是正确的。看看@alk,那么G++预处理器被称为CPPPP?
char
是一种不同于
signed char
unsigned char
的类型,不管怎样。@paxdiablo它对buf和uint8\t也给出了相同的警告。我正在用GCC编译代码,默认情况下将CHAR视为签名char
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,