gpt4 book ai didi

c++ - 在使用 pedantic 标志编译时,如何在 C++ 中从 (void *) 重新键入到 int 而不会收到任何警告?

转载 作者:行者123 更新时间:2023-11-30 00:36:06 24 4
gpt4 key购买 nike

我有一个多线程 客户端-服务器应用程序,它通过套接字 进行通信。我用这种结构创建新线程:

 pthread_t thread;
pthread_create(&thread, NULL, c->sendMessage, (void *) fd);

其中 fd 是连接的 ID,c->sendMessage 是一个函数,在创建新线程后调用并处理该线程。在此函数中,我需要通过 send(int sockfd, const void *buf, size_t len, int flags);

发送一些消息

所以我这样得到sockfd:

void * Client::sendMessage(void *threadid) {
int sockfd = (int) threadid;
// some more code here and in the end I send the data via send(int sockfd, const void *buf, size_t len, int flags)
}

我使用 -pedantic 标志进行编译,大多数编译器(包括我的编译器)在编译期间不会抛出任何警告或错误。但是有些人在编译期间抛出一个错误,指出这种从 void *int 的重新键入是不安全的,并且可能导致 loose of precision。我知道,这不是一个好的解决方案,应该做得更干净。但我不知道怎么做。任何人都可以建议我任何干净的做法,如何将 ponter 重新键入 int 并避免在编译期间出现任何警告?

最佳答案

发送指针而不是整数有什么问题?将int转换为void*,或将void*转换为int,这不是标准的一致性解决方案。

pthread_create(&thread, NULL, c->sendMessage, new int(fd));

int* sockfd_ptr = (int*)threadid;
// some usage
delete sockfd_ptr;

任何指针都可以转换为 void*,因此它应该可以正常工作。不要忘记在程序的某些地方删除 threadid。可能创建一些存储引用/指针的类会更好。

另外,我不明白,你如何将成员函数发送到C函数中,这也不正确。

关于c++ - 在使用 pedantic 标志编译时,如何在 C++ 中从 (void *) 重新键入到 int 而不会收到任何警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16983235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com