对于该代码 修改报错warning: comparison of distinct pointer types lacks a cast
时间: 2023-12-03 20:45:54 浏览: 608
这个警告通常是因为使用了不同类型的指针进行比较。可以通过将指针强制转换为相同类型来解决这个问题。例如,如果比较的是两个`char*`类型的指针,可以将它们强制转换为`void*`类型,然后再进行比较。
例如:
```
char *str1 = "hello";
char *str2 = "world";
if ((void*)str1 == (void*)str2) {
// do something
}
```
在这个例子中,我们将`str1`和`str2`强制转换为`void*`类型,然后再进行比较,就避免了警告。但是需要注意的是,强制转换可能会导致其它问题,因此应该谨慎使用。
相关问题
tcp.c:50:33: warning: comparison of distinct pointer types lacks a cast [enabled by default] char *str =(char *) (datahandle == recv ? "recv" :"send");
这个警告是因为你在比较两个不同类型的指针,即 `datahandle` 和字符串字面量 `"recv"` 或 `"send"` 的指针类型不同。为了解决这个问题,你可以将字符串字面量强制转换为与 `datahandle` 相同的类型,如下所示:
```
char *str = (char *)(datahandle == recv ? (void *)"recv" : (void *)"send");
```
这里使用 `void *` 指针类型进行了强制转换,这样就可以避免警告。
tcp.c: In function ‘SocketDataHandle’: tcp.c:50:25: warning: comparison of distinct pointer types lacks a cast [enabled by default] char * str = datahandle == recv ? "recv" : "send";
这个警告是因为在第50行,你在比较两个不同类型的指针,而没有进行显式的类型转换。可能是因为 `datahandle` 和 `recv` 是不同的指针类型,所以编译器会发出警告,建议你在比较之前进行类型转换,或者确定两个指针的类型相同。例如:
```
char * str = (char *)(datahandle == recv ? "recv" : "send");
```
这样就可以避免编译器发出警告了。
阅读全文