这个警告的翻译过来是警告:从 'int' 转换为 'unsigned int' 可能会更改结果 [-Wsign-conversion] 的符号
你在某个函数调用的传参的时候与默认的参数类型不匹配就会产生错误(一般编译器是会直接报错的,但是unsigned int 和int之间 由于二进制码的转换是可以成功转换的,只会提出警告,可以编译成功)
这里的意思是拿了一个malloc的函数进行举例 malloc分配内存的第一个参数是size_t(long unsigned int) 如果你传入的是int类型的参数 编译器给你一个警告万一这个值它是负数 ,int在进行二进制转换为unsigned的无符号位的时候会被转换成很大的数
-1
的二进制表示是所有位都是 1。在无符号 32 位整数中,这将被解释为 2^32 - 1
malloc会尝试分配一个非常大的正数大小的内存2^32 - 1,可能直接崩溃
解决方案1:手动的显示转换传入参数 malloc((size_t)len,....);
解决方案2:当你在导入某些库的时候可能会用到,里面有些不规范的代码需要我们去处理
如果你在做项目可以保证不会这么传值(负数) 并且有多个类似的函数已经无法手动排查解决,直接修改编译器的警告类型
删除由这个类型带来的警告
手动加上没有zh警告的类型
成功消除警告