函数返回void *时实际返回的是什么?

What shall function actually return, when it returns void *

本文关键字:返回 是什么 void 函数      更新时间:2023-10-16

我正在编写一个多线程应用程序,该函数处理新线程,声明如下:

void * Client::sendMessage(void *threadid) {
// some code without any return
}

我这样调用这个函数:

// create new thread for outcomming messages
    pthread_t thread;
    pthread_create(&thread, NULL,
            c->sendMessage, (void *) fd);

它工作得很好,但是当我在这个命令中使用这些标志编译它时:g++ main.cpp -Wall -pedantic -Wno-long-long -O0 -ggdb -lncurses -pthread -o ChatApp,它让我不断收到这样的消息:

Client.cpp: In static member function ‘static void* Client::sendMessage(void*)’:
Client.cpp:167:1: warning: no return statement in function returning non-void [-Wreturn-type]

我的问题是,在编译过程中,我应该返回什么来消除这些警告呢?

sendMessage函数的地址作为第三个参数传递给pthread_create

调用pthread_create创建一个新线程,当start例程(在本例中,您的sendMessage函数)返回(或在任何其他情况下)时该线程终止。从start例程返回一个值相当于将相同的值传递给pthread_exit()。启动例程返回的void*值可以被同一进程中的另一个线程使用,如果该线程调用了pthread_join

void*的值,因为void*是一个泛型指针,可以指向任何类型的对象。如果希望使用这种机制将信息从一个终止线程传递到另一个线程,则需要确定一种机制。如果您不需要传递此类信息,那么start例程返回什么都无关紧要;最简单的方法是return nullptr;

返回与函数契约一致的内容。如果返回值确实总是被忽略,考虑将返回类型更改为void。

void *与void函数不同。void *是一个指针,但它可以更安全地指向任何东西,在c++中你不应该需要使用void *非常多,但它应该返回的是一个指针。在这种情况下,看起来您可能只需要返回threadid。顺便说一下,在你的例子中,函数默认返回0(即NULL)这也可以,从提供的代码量中很难知道