在C++中可用于不可达代码的注解
我有一个函数,里面同时包含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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。