在宏中对指针参数前加上 '#' 符号,这样可以表示该指针的出处,比较下面代码:
[C++] 纯文本查看 复制代码 #include
#include
void do_nofail(void *ptr, const char *expr)
{
if(ptr)
printf ("Memory allocation good:%s\n", expr);
else
printf ("Memory allocation failed:%s\n", expr);
}
#define NOFALL(ptr) do_nofail((ptr), #ptr)
int main()
{
char buf[5] = {'a', 'b', 'c', 'd', 'e'};
char *p = buf;
NOFALL(buf);
NOFALL(p);
NOFALL(malloc(sizeof(int)));
return 0;
}
运行输出:[beyes@beyes c]$ ./do_nofail
Memory allocation good:buf
Memory allocation good:p
Memory allocation good:malloc(sizeof(int)) 从最后一个 NOFALL 宏的输出可以看到我们知道 do_nofail() 函数里的指针来自 malloc() 这个函数。 |