Please see line marked "*** HERE ***".
Tested in gcc 4.6.0.
#include <stdio.h>
#define nothing
#define RET_VAL_IF_NULL(p,v) \
if (p == NULL) \
return v;
#define RET_IF_NULL(p) \
RET_VAL_IF_NULL(p, nothing)
static void func1(char* ptr)
{
RET_IF_NULL(ptr)
printf("* %s from func1\n", ptr);
}
static int func2(char* ptr)
{
RET_VAL_IF_NULL(ptr,1)
printf("* %s from func2\n", ptr);
return 0;
}
void main(void)
{
char* p1 = 0, *p2 = "string";
func1(p1);
func1(p2);
func2(p1);
func2(p2);
}