//最后一行的ptr1为返回值
#define MY_MALLOC_TYPE(type) ({ \
type *ptr1 = NULL; \
type *ptr2 = malloc(sizeof(type)); \
if (ptr2) \
{ \
memset(ptr2, 0x0, sizeof(type)); \
ptr1 = ptr2; \
printf("malloc type:%s, addr:%p\n", #type, ptr1); \
} \
ptr1; \
})
int *b = MY_MALLOC_TYPE(int);
*b = 77;
printf("%p, %d\n", b, *b);
#define MY_MALLOC_TYPE_WITH_VAL(type, val) ({ \
type *ptr1 = NULL; \
type *ptr2 = malloc(sizeof(type)); \
if (ptr2) \
{ \
memset(ptr2, 0x0, sizeof(type)); \
ptr1 = ptr2; \
*ptr1 = (val); \
printf("malloc type:%s, addr:%p\n", #type, ptr1); \
} \
ptr1; \
})
int *c = MY_MALLOC_TYPE_WITH_VAL(int, 77);
printf("%d\n", *c);
#define MY_MALLOC_SIZE(size) ({ \
void *ptr1 = NULL; \
void *ptr2 = malloc(size); \
if (ptr2) \
{ \
memset(ptr2, 0x0, size); \
ptr1 = ptr2; \
printf("addr:%p\n", ptr1); \
} \
ptr1; \
})
int *d = MY_MALLOC_SIZE(sizeof(int));
*d = 77;
printf("%p, %d\n", d, *d);