gpt4 book ai didi

c - 有没有办法提供一个宏函数来返回不同类型的值,包括什么都没有?

转载 作者:太空狗 更新时间:2023-10-29 14:57:12 24 4
gpt4 key购买 nike

我已经创建了以下宏来锁定互斥量并在尝试锁定失败时返回(从调用该宏的函数)。目前我已经将它缩小到 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

最佳答案

为了使其与 ANSI 兼容,我定义了带有 return 的宏和另一个计算结果为 null 并清楚地表明它为 null 的简单符号。即:

#define VOID_RET    //This nulls the return value
#define MUTEX_LOCK(err_val)\
{\
if (pthread_mutex_lock(&mutex) != 0)\
{\
printf("Failed to lock mutex.\n");\
return err_val;\
}\
}
void *mutex = NULL;
void vfunc(void)
{
printf("\nIn vfunc()\n");
MUTEX_LOCK(VOID_RET);
printf("\nOut of vfunc()\n");
}
UINT16 uint16func(void)
{
printf("\nIn uint16func()\n");
MUTEX_LOCK(0);
printf("\nOut of uint16func()\n");

return 9;
}
CHAR* errstr = "Hoo boy!";
CHAR* strfunc(void)
{
printf("\nIn strfunc()\n");
MUTEX_LOCK(errstr);
printf("\nOut of strfunc()\n");

return NULL;
}

我在 C11 和 C99 下测试了这段代码。

关于c - 有没有办法提供一个宏函数来返回不同类型的值,包括什么都没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34555538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com