Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C

Passing an empty parameter to a C macro

0.00/5 (No votes)
21 Jul 2011CPOL 20.8K  
How to fool the C pre-processor into accepting an empty parameter to a #define
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) /* *** HERE *** */

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);
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)