我被要求分解一个 C 程序,它最初只是一个主要方法,有很多注释很好的段。如果发生错误,每个段都使用相同的定义函数字符串“die”。die 函数使用 goto 标签 'out' 来关闭程序。
在将这些段中的每一个都转换为现在都从底部缩小的 main 方法调用的函数之后,每个段的这个 goto out 代码不再起作用。'out' 标签在 main 中,XCode 编译器告诉我 goto 标签尚未定义。
所以我想我在问如何以最有效的方式在每个本地函数中定义我的 out 标签?
以下是一些代码片段,全部按照它们出现的顺序/结构:
模具定义
#define die(msg, ...) do { \
(void) fprintf (stderr, msg, ## __VA_ARGS__); \
(void) fprintf (stderr, "\n"); \
goto out; \
} while (0)
使用 die 的函数示例
void createContext(void){
context = clCreateContext (0, 1, &device_id, NULL, NULL, &err);
if (!context || err != CL_SUCCESS)
die ("Error: Failed to create a compute context!");
}
最后是我的 main,最后包含 die 的 out 标签
main (int argc, char *argv[])
{
(Several functions called here)
out:
/* Shutdown and cleanup. */
if (data)
free (data);
if (results)
free (results);
return rc;
}