首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮忙分析下下面的几行代码是什么意思解决方案

2012-06-12 
帮忙分析下下面的几行代码是什么意思#define D_FREE(ptr) sfree((void *) (1 ? (const void *) &(ptr) : (

帮忙分析下下面的几行代码是什么意思
#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)会发生什么

热点排行