Suppose I have the following construct in multiple places in my code and want to make my code more legible:

```
#if HAVE_LIBFOOBAR
    foobar_func(data);
#endif

```

I was thinking of writing a function-style macro around this, which would handle the conditionals, making the occurrences in the code look like a regular function call:

```
    foobar_func_if_available(data)

```

If the condition is true, this would be replaced with a call to the actual function, else it would be a no-op.

Thus, something like:

```
#if HAVE_LIBFOOBAR
#define foobar_func_if_available(x) foobar_func(x)
#else
#define foobar_func_if_available(x) {}
#endif

```

Questions:

* Does `{}` work as a no-op? Is it safe from having unintended effects (such as being used in an unbracketed `if` statement)? If not, what would I use?
* Do I have to have two independent `#define`s wrapped in conditionals, or is there a way to do it the other way round (one `#define` with the conditionals inside the function-style macro)?

Edit: it has been suggested that this is a duplicate of [another question](https://stackoverflow.com/q/154136/2703209), but in my opinion it is not: the other question asks “what is the problem solved with this construct”, mine is “what construct will solve my problem”. Indeed the other question has a possible solution to my problem, it does not cover all aspects of my question.