我正在尝试修改open-vm-tools,它在Linux中有效。 但是,当我使用Nmake时,出现“ No return”错误。
函数中没有返回非空[-Werror = return-type]的返回语句
似乎我在此函数中丢失了返回字。但是该函数的底部有返回字。为了解决该问题,我在第17行中添加了“重新运行0”。它可以正常工作,但是在“返回0”之后的以下代码将不会执行。那不是我想要的。这是函数:
static int
ToolsCoreRunLoop(ToolsServiceState *state)
{
if (!ToolsCore_InitRpc(state)) {
return 1;
}
if (state->ctx.rpc && !RpcChannel_Start(state->ctx.rpc)) {
return 1;
}
if (state->ctx.rpc) {
ToolsCoreReportVersionData(state);
}
//return 0; Here is what I add
#if 0
if (!ToolsCore_LoadPlugins(state)) {
return 1;
}
#if defined(__linux__)
if (state->mainService) {
ToolsCore_InitVsockFamily(state);
}
#endif
if (state->ctx.errorCode == 0 &&
(state->ctx.isVMware ||
ToolsCore_GetTcloName(state) == NULL ||
state->debugPlugin != NULL)) {
ToolsCore_RegisterPlugins(state);
if (g_signal_lookup(TOOLS_CORE_SIG_IO_FREEZE,
G_OBJECT_TYPE(state->ctx.serviceObj)) != 0) {
g_signal_connect(state->ctx.serviceObj,
TOOLS_CORE_SIG_IO_FREEZE,
G_CALLBACK(ToolsCoreIOFreezeCb),
state);
}
state->configCheckTask = g_timeout_add(CONF_POLL_TIME * 1000,
ToolsCoreConfFileCb,
state);
#if defined(__APPLE__)
ToolsCore_CFRunLoop(state);
#else
g_main_loop_run(state->ctx.mainLoop);
#endif
}
ToolsCoreCleanup(state);
return state->ctx.errorCode;
#endif
}
int
ToolsCore_Run(ToolsServiceState *state)
{
return ToolsCoreRunLoop(state);
}
有人可以给我一些建议吗?谢谢。
答案 0 :(得分:2)
在#endif
和}
之间缺少返回。
但是该函数的底部有返回字。
没有return
。
以下是#if 0
#if 0
if (!ToolsCore_LoadPlugins(state)) {
return 1;
}
#if defined(__linux__)
if (state->mainService) {
ToolsCore_InitVsockFamily(state);
}
#endif
if (state->ctx.errorCode == 0 &&
(state->ctx.isVMware ||
ToolsCore_GetTcloName(state) == NULL ||
state->debugPlugin != NULL)) {
ToolsCore_RegisterPlugins(state);
if (g_signal_lookup(TOOLS_CORE_SIG_IO_FREEZE,
G_OBJECT_TYPE(state->ctx.serviceObj)) != 0) {
g_signal_connect(state->ctx.serviceObj,
TOOLS_CORE_SIG_IO_FREEZE,
G_CALLBACK(ToolsCoreIOFreezeCb),
state);
}
state->configCheckTask = g_timeout_add(CONF_POLL_TIME * 1000,
ToolsCoreConfFileCb,
state);
#if defined(__APPLE__)
ToolsCore_CFRunLoop(state);
#else
g_main_loop_run(state->ctx.mainLoop);
#endif
}
ToolsCoreCleanup(state);
return state->ctx.errorCode;
#endif
更好的格式可以使内容更清晰
static int ToolsCoreRunLoop(ToolsServiceState *state) {
if (!ToolsCore_InitRpc(state)) {
return 1;
}
if (state->ctx.rpc && !RpcChannel_Start(state->ctx.rpc)) {
return 1;
}
if (state->ctx.rpc) {
ToolsCoreReportVersionData(state);
}
//return 0; Here is what I add
#if 0
if (!ToolsCore_LoadPlugins(state)) {
return 1;
}
#if defined(__linux__)
if (state->mainService) {
ToolsCore_InitVsockFamily(state);
}
#endif
if (state->ctx.errorCode == 0 &&
(state->ctx.isVMware ||
ToolsCore_GetTcloName(state) == NULL ||
state->debugPlugin != NULL)) {
ToolsCore_RegisterPlugins(state);
if (g_signal_lookup(TOOLS_CORE_SIG_IO_FREEZE,
G_OBJECT_TYPE(state->ctx.serviceObj)) != 0) {
g_signal_connect(state->ctx.serviceObj,
TOOLS_CORE_SIG_IO_FREEZE,
G_CALLBACK(ToolsCoreIOFreezeCb),
state);
}
state->configCheckTask = g_timeout_add(CONF_POLL_TIME * 1000,
ToolsCoreConfFileCb,
state);
#if defined(__APPLE__)
ToolsCore_CFRunLoop(state);
#else
g_main_loop_run(state->ctx.mainLoop);
#endif
}
ToolsCoreCleanup(state);
return state->ctx.errorCode;
#endif
// Missing return
}