我有点不知道为什么编译器没有发出任何警告,这让我感到困惑。
上面是我针对Windows特定的主函数。请注意,lpCmdLine参数的类型为LPSTR,这是char *的typedef。
现在,我定义了一个具有以下原型的函数:
当我将
然而,我有些惊讶的是编译器没有警告我们可能会丢失符号,如果我们解除引用
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 *
。
char
的有无符号是由实现定义的,不能保证其为有符号,不管怎样。 - Sourav Ghoshvoid COM_ParseCmdLine(signed char *lpCmdLine)
。如果出现警告,则问题在于编译器设置(设置为无符号)。 - i486