从char *转换为uint8_t *

时间:2016-01-19 09:24:52

标签: c

我有点不知道为什么编译器不会发出任何警告。

int32_t CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int32_t nCmdShow)
{
  //..
}

以上是我特定于Windows的主要功能。请注意,lpCmdLine参数的类型为LPSTRtypedefchar *

现在,我已经使用以下原型定义了一个函数:

void COM_ParseCmdLine(uint8_t *lpCmdLine);

当我将lpCmdLine变量传递给此函数时,它按预期运行并给出正确的结果,因为命令行字符为8位且十进制值为正。

然而,我有点惊讶的是,如果我们尊重uint8_t *char *的对比,编译器不会警告我们可能会失去这个标志。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

因此,uint8_t很可能与您特定系统上的char 100%兼容,然后您就不会收到任何警告。