我从下面的函数中收到编译器“警告:返回丢弃来自指针目标类型的限定符”。
unsigned char* getBeginning(const unsigned char * Packet)
{
return Packet+3;
}
我已经在 SO 和其他地方对此进行了研究,编译器似乎在提示虽然我接受了一个 const 指针,但我返回了一个非 const 指针。
我想要完成的是:
1) 我想让用户知道我不会在此函数中更改他们的任何数据,因此不会更改常量。
2) 但是,后面的函数会使用这里返回的指针进行更改,所以我不想让我的返回类型也为const。
在我没有收到警告的情况下,是否有更好的方法来执行此操作?我还在学习 C。
最佳答案
C 没有从 const 限定指针类型到非 const 限定指针类型的隐式转换,因此您应该添加一个显式转换,即强制转换。然后警告将消失:
unsigned char* getBeginning(const unsigned char * Packet)
{
return (unsigned char *)Packet+3;
}
请注意,此函数有点“危险”,因为它可以隐藏 const 限定符的删除。但它并不比标准库中的 strchr
更危险。只要您不尝试通过返回的指针修改 const 限定的对象,该行为就已完美定义。
关于C: 编译器警告 "return discards qualifiers from pointer target type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830335/