帮忙分析下下面的几行代码是什么意思
#define D_FREE(ptr) sfree((void *) (1 ? (const void *) &(ptr) : (ptr)))
void sfree(void *ptrptr)
{
int save_errno = errno;
free(*(void**)ptrptr);
*(void**)ptrptr = NULL;
errno = save_errno;
}
[解决办法]
就是释放内存,把那个ptr指向NULL...
[解决办法]
同求解释。
[解决办法]
诶。。预处理下就知道了吗,,,这样的类型转换,,也太丑了点吧
取ptr的地址(此时的类型为void**),转化为(void*),传入scfree,释放,返回。
期间还保护了errno
[解决办法]
#define D_FREE(ptr) sfree((void *) (1 ? (const void *) &(ptr) : (ptr)))
1:将sfree((void *) (1 ? (const void *) &(ptr) : (ptr)))定义为宏 D_FREE(ptr);
2:(void *) (1 ? (const void *) &(ptr) : (ptr))是函数sfree()的实参;
3:1 ? (const void *) &(ptr) : (ptr),如果?前的表达式为真则到:前的值,显然?前的表达式的值是1,整个?:语句的值就是(const void *) &(ptr),即ptr的地址,再强制转换为const void *类型;
4:(void *) (1 ? (const void *) &(ptr) : (ptr))前面的(void *)又将const void *类型的ptr的地址强制转换为void *类型。。。
不明白为什么要这么写,按说直接将1 ? (const void *) &(ptr) : (ptr)写成(const void *) &(ptr)不就好了么
[解决办法]
突然想到,如果有人来个D_FREE(NULL)会发生什么