将char *类型转换为uint8_t *类型

3
我有点不知道为什么编译器没有发出任何警告,这让我感到困惑。
int32_t CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int32_t nCmdShow)
{
  //..
}

上面是我针对Windows特定的主函数。请注意,lpCmdLine参数的类型为LPSTR,这是char *的typedef。
现在,我定义了一个具有以下原型的函数:
void COM_ParseCmdLine(uint8_t *lpCmdLine);

当我将lpCmdLine变量传递到该函数中时,它按预期运行并给出正确的结果,因为命令行字符是8位且在十进制值中为正数。
然而,我有些惊讶的是编译器没有警告我们可能会丢失符号,如果我们解除引用uint8_t *char *

3
char 的有无符号是由实现定义的,不能保证其为有符号,不管怎样。 - Sourav Ghosh
你是否已经打开了编译器的警告? - Selçuk Cihan
尝试使用 void COM_ParseCmdLine(signed char *lpCmdLine)。如果出现警告,则问题在于编译器设置(设置为无符号)。 - i486
2
请不要修改标题。请向@i486请求发布答案(或自己发布),并将其标记为已接受的答案(请参阅当答案被“接受”时意味着什么?)。 - Thomas Ayoub
啊,谢谢你的链接,Thomas。 - madski
显示剩余2条评论
2个回答

2

将编译警告级别设置为/Wall将会产生上述警告。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Lundin

0

char类型具有实现定义的符号性,这意味着它可以等于signed intunsigned int,从编译器到编译器不同。

因此,在您特定的系统上,uint8_t很可能与char完全兼容,那么您就不会收到任何警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接