在C++中可用于不可达代码的注解

编程语言 2026-07-09

我有一个函数,里面同时包含Windows和 Linux的代码。由于我使用了 execl,在某个点会有一部分代码变得不可达。有没有用于这种情况的C++属性?

uint32_t Verify(const std::string& exe_path, const std::string& file_path)
{
#ifdef _WIN32
  // Windows code is here
  return 0;
#else
  if (pid_t pid = fork(); pid == -1)
      return 1;
  else if (!pid)
      execl(AppData::RAR_PATH, std::filesystem::path(AppData::RAR_PATH).filename().c_str(), std::format(AppData::RAR_CMD_LINUX, file_path).c_str(), (char*)0);
  else
  {
      int status{};
      waitpid(pid, &status, 0);
      return WIFEXITED(status) ? 1 : 0;
  }
#endif
}

我已经处理了所有情况,但编译器仍然说会到达非void函数的末尾。虽然我可以把 else 块完全移除,但我对属性(attribute)感兴趣。

我尝试了 [[unreachable]][[noreturn]],但都没能抑制这个警告。确实,有很多处理方式,我只是想问是否有一种通过属性实现的方式。

解决方案

编译器的警告是正确的,名为 execl() 的函数在失败时会返回。请修复代码,或返回你想返回的任何内容。

else if (!pid)
  return execl(AppData::RAR_PATH, std::filesystem::path(AppData::RAR_PATH).filename().c_str(), std::format(AppData::RAR_CMD_LINUX, file_path).c_str(), (char*)0);
else
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章