我创建了以下宏来锁定互斥锁并返回(从调用此宏的函数),以防尝试锁定失败.目前我已经将它缩小到2个宏 - 一个用于从返回值的函数返回,不管类型如何,另一个用于从返回任何函数的函数返回(即void).
宏之外的代码(下面)仅用于说明,与使用宏的实际生产代码几乎没有关系.
#define MUTEX_LOCK()\ {\ if (pthread_mutex_lock(&mutex) != 0)\ {\ printf("Failed to lock mutex.\n");\ return;\ }\ } #define MUTEX_LOCK_RVAL(err_val)\ {\ if (pthread_mutex_lock(&mutex) != 0)\ {\ printf("Failed to lock mutex.\n");\ return err_val;\ }\ } void vfunc() { printf("\nIn vfunc()\n"); MUTEX_LOCK(); printf("\nOut of vfunc()\n"); } UINT16 uint16func() { printf("\nIn uint16func()\n"); MUTEX_LOCK_RVAL(0); printf("\nOut of uint16func()\n"); return 9; } CHAR* errstr = "Hoo boy!"; CHAR* strfunc() { printf("\nIn strfunc()\n"); MUTEX_LOCK_RVAL(errstr); printf("\nOut of strfunc()\n"); return NULL; }
有没有办法将这些减少到一个宏,可以在返回值和void的函数中使用.