C警告:函数中没有return语句返回非空

时间:2019-01-10 03:23:22

标签: c

我正在尝试修改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);
}

有人可以给我一些建议吗?谢谢。

1 个答案:

答案 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

}