【编程好习惯】恰当使用goto语句
来源:互联网 发布:北宋 知乎 编辑:程序博客网 时间:2024/05/29 07:03
example.c
00097: int queue_init (queue_t ** _pp_queue, int _size)
00098: {
00099: pthread_mutexattr_t attr;
00100: queue_t *queue;
00101:
00102: queue = (queue_t *) malloc(sizeof(queue_t));
00103: if (0 == queue) {
00104: return -1;
00105: }
00106: *_pp_queue = queue;
00107:
00108: memset (queue, 0, sizeof (*queue));
00109: queue->size_ = _size;
00110:
00111: pthread_mutexattr_init (&attr);
00112: if (0 != pthread_mutex_init(&queue->mutex_, &attr)) {
00113: pthread_mutexattr_destroy (&attr);
00114: free (queue);
00115: return -1;
00116: }
00117:
00118: queue->messages_ = (void **) malloc (queue->size_ * sizeof (void *));
00119: if (0 == queue->messages_) {
00120: pthread_mutexattr_destroy (&attr);
00121: free (queue);
00122: return -1;
00123: }
00124:
00125: if (0 != sem_init(&queue->sem_put_, 0, queue->size_)) {
00126: free (queue->messages_);
00127: pthread_mutexattr_destroy (&attr);
00128: free (queue);
00129: return -1;
00130: }
00131:
00132: pthread_mutexattr_destroy (&attr);
00133:
00134: return 0;
00135: }
00097: int queue_init (queue_t ** _pp_queue, int _size)
00098: {
00099: pthread_mutexattr_t attr;
00100: queue_t *queue;
00101:
00102: queue = (queue_t *) malloc(sizeof(queue_t));
00103: if (0 == queue) {
00104: return -1;
00105: }
00106: *_pp_queue = queue;
00107:
00108: memset (queue, 0, sizeof (*queue));
00109: queue->size_ = _size;
00110:
00111: pthread_mutexattr_init (&attr);
00112: if (0 != pthread_mutex_init(&queue->mutex_, &attr)) {
00113: pthread_mutexattr_destroy (&attr);
00114: free (queue);
00115: return -1;
00116: }
00117:
00118: queue->messages_ = (void **) malloc (queue->size_ * sizeof (void *));
00119: if (0 == queue->messages_) {
00120: pthread_mutexattr_destroy (&attr);
00121: free (queue);
00122: return -1;
00123: }
00124:
00125: if (0 != sem_init(&queue->sem_put_, 0, queue->size_)) {
00126: free (queue->messages_);
00127: pthread_mutexattr_destroy (&attr);
00128: free (queue);
00129: return -1;
00130: }
00131:
00132: pthread_mutexattr_destroy (&attr);
00133:
00134: return 0;
00135: }
图1
example.c
00053: int queue_init (queue_t ** _pp_queue, int _size)
00054: {
00055: pthread_mutexattr_t attr;
00056: queue_t *queue;
00057:
00058: queue = (queue_t *) malloc(sizeof(queue_t));
00059: if (0 == queue) {
00060: return -1;
00061: }
00062: *_pp_queue = queue;
00063:
00064: memset (queue, 0, sizeof (*queue));
00065: queue->size_ = _size;
00066:
00067: pthread_mutexattr_init (&attr);
00068: if (0 != pthread_mutex_init(&queue->mutex_, &attr)) {
00069: goto error;
00070: }
00071:
00072: queue->messages_ = (void **) malloc (queue->size_ * sizeof (void *));
00073: if (0 == queue->messages_) {
00074: goto error;
00075: }
00076:
00077: if (0 != sem_init(&queue->sem_put_, 0, queue->size_)) {
00078: goto error1;
00079: }
00080:
00081: pthread_mutexattr_destroy (&attr);
00082:
00083: return 0;
00084:
00085: error1:
00086: free (queue->messages_);
00087: error:
00088: pthread_mutexattr_destroy (&attr);
00089: free (queue);
00090: return -1;
00091: }
00053: int queue_init (queue_t ** _pp_queue, int _size)
00054: {
00055: pthread_mutexattr_t attr;
00056: queue_t *queue;
00057:
00058: queue = (queue_t *) malloc(sizeof(queue_t));
00059: if (0 == queue) {
00060: return -1;
00061: }
00062: *_pp_queue = queue;
00063:
00064: memset (queue, 0, sizeof (*queue));
00065: queue->size_ = _size;
00066:
00067: pthread_mutexattr_init (&attr);
00068: if (0 != pthread_mutex_init(&queue->mutex_, &attr)) {
00069: goto error;
00070: }
00071:
00072: queue->messages_ = (void **) malloc (queue->size_ * sizeof (void *));
00073: if (0 == queue->messages_) {
00074: goto error;
00075: }
00076:
00077: if (0 != sem_init(&queue->sem_put_, 0, queue->size_)) {
00078: goto error1;
00079: }
00080:
00081: pthread_mutexattr_destroy (&attr);
00082:
00083: return 0;
00084:
00085: error1:
00086: free (queue->messages_);
00087: error:
00088: pthread_mutexattr_destroy (&attr);
00089: free (queue);
00090: return -1;
00091: }
图2
0 0
- 【编程好习惯】恰当使用goto语句
- goto语句的使用
- C#使用goto语句
- 正确使用goto语句
- C#编程好习惯--TODO注释使用
- 【编程好习惯】使用空格增加可读性
- 21、goto语句的使用
- delphi Goto 语句的使用
- 关于goto语句的使用
- goto语句的简单使用
- goto语句的使用案例
- 好的编程习惯
- 编程好习惯
- 好的编程习惯
- [转帖]编程好习惯
- 编程好习惯
- C#编程好习惯
- 编程中的好习惯
- tomcat搭建android https双向认证
- 这是智能硬件开发门槛被降得最低的一次
- HDOJ 4333 Revolving Digits
- 30 个你可能不知道的 Python 语言特性和技巧
- CVTE Android应用开发工程师笔试题之一:现代操作系统有哪几部分组成?
- 【编程好习惯】恰当使用goto语句
- Git命令总结(持续更新)
- 详解java中equals和== 的区别
- python challenge_15
- ios视频教程
- 关于腾讯微信公众账号开发的BUG
- 设计模式理解
- IOS 横向TabelView
- 【编程好习惯】屏蔽编程语言特性