我被要求打破一个C程序,这个程序最初只是一个主要的方法,有很多评论很好的段。如果发生错误,每个段都使用相同的定义函数字符串'die'。 die函数使用goto标签'out'来关闭程序。
将这些段中的每一个转换为一个函数,现在都是从底部按比例缩小的main方法调用的,每个段的转出代码不再有效。 '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!");
}
最后我的主要内容,其中包含来自末尾的out标签
main (int argc, char *argv[])
{
(Several functions called here)
out:
/* Shutdown and cleanup. */
if (data)
free (data);
if (results)
free (results);
return rc;
}