C Предупреждение: нет оператора возврата в функции, возвращающей не void - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь изменить open-vm-tools, и это работает в Linux. Однако при использовании Nmake появляется ошибка «Нет возврата».

нет оператора возврата в функции, возвращающей не void [-Werror = тип возврата]

Кажется, я теряю слово возврата в этой функции. Но есть слово возврата в нижней части функции. Чтобы решить эту проблему, я добавил 'retrun 0' в строку 17. Это работает, но следующий код после 'return 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 голосов
/ 10 января 2019

Отсутствует возврат между #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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...