函数返回void *时实际返回的是什么?
What shall function actually return, when it returns void *
我正在编写一个多线程应用程序,该函数处理新线程,声明如下:
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)这也可以,从提供的代码量中很难知道
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 返回类型在 C++ OOP 中是什么意思
- 在C++中返回 IO 对象的目的是什么?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- T*&返回类型到底是什么
- 在 c++ 中从执行的 shell 命令获取返回状态的安全方法是什么?
- 使用作为参数返回的指针的最佳做法是什么
- 返回向量元素的 l 值的正确方法是什么?
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- CUDA返回值错误35的含义是什么
- c++运算符重载-我实际返回的操作数类型是什么
- GetWindowRect()返回的大小小于游戏的实际可见窗口的可能原因是什么
- 运算符和返回类型是什么意思?
- 返回布尔值在 cocos2dx 的 onTouchBegan() 中是什么意思?
- 在C++中为零大小的分配返回唯一地址背后的基本原理是什么?
- 在下面函数的返回中添加 const 限定符的重要性是什么?
- 在C++中将结构从被调用函数返回到调用函数的适当方法是什么
- 是什么意思,返回值是一个类名,后跟一对空括号
- 将函数结果作为"output parameter"返回是什么意思?