处理 C 中致命错误的最佳跨平台实践?

时间:2021-07-10 06:28:18

标签: c vulkan

除了将失败记录到 stderr 和日志文件之外,我应该如何处理致命错误?

示例:

VkResult result = vkCreateInstance(&createInfo, NULL, &vulkanInfo->instance);
if (result != VK_SUCCESS) {
    // ???
}

如果 vkCreateInstance 失败,一切就结束了。该应用程序无法继续。我该怎么办?

目标是 Windows、Mac、Linux、Switch 等。

我意识到这是一个非常开放的问题。我只是很好奇这里的伟人是如何处理它的。

2 个答案:

答案 0 :(得分:3)

<块引用>

我应该如何处理致命错误?

应用无法继续

因为 The app cannot continue 您应该停止您的应用程序。正确编写的应用程序将:

  • 将错误消息打印到 stderr
  • 停止并加入并同步所有线程
  • 释放所有动态分配的内存
  • 关闭所有打开的文件
  • 如果需要,通常清理所有共享资源(我想到了共享内存)
  • 出现错误退出应用程序

为了(几乎是不必要的)可移植性,您可以使用 exit(EXIT_FAILURE) 来通知系统您的应用程序退出时出现错误(但最好使用 exit(EXIT_FAILURE) 以提高可读性)。对于您定位的平台,将 exit() 与 0 以外的任何其他值一起使用 - exit(0) 表示应用程序成功。对于很多应用来说,一些特定的退出值也是用来通知上层应用具体发生了什么错误,like grep如果过滤了某些行则退出0,没有过滤行则退出1,如果发生错误则退出其他退出代码(例如该文件不存在)。

答案 1 :(得分:2)

<块引用>

处理 C 中致命错误的最佳跨平台实践?

您的代码正在处理 Vulkan,因此可以合理地假设几乎每个使用您软件的人都将使用 GUI,并且不会查看(也永远不会看到)发送到 stdoutstderr 的任何内容.反而;他们会期待“特定于 GUI 的通知”(一个对话框)。

在线有多种不同的“跨平台 GUI 工具包”库可供选择(如果您不想为对话框编写一个最小的包装器,别无其他)。

相关问题