cross platform macro for silencing unused variables warning
c++, clang, suppress-warnings, visual-c++, xcode
Solution
Yup - you can use this approach for GCC and Clang:
#define MON_Internal_UnusedStringify(macro_arg_string_literal) #macro_arg_string_literal
#define MONUnusedParameter(macro_arg_parameter) _Pragma(MON_Internal_UnusedStringify(unused(macro_arg_parameter)))
although mine did have the `(void)` approach defined for clang, it appears that Clang now supports the stringify and `_Pragma` approach above. `_Pragma` is C99.
Problem
In porting a large piece of C++ code from Visual Studio (2008) to Xcode (4.4+), I encounter lines such as: ``` UNUSED_ALWAYS(someVar); ``` the `UNUSED_ALWAYS(x)` (through `UNUSED(x)`) macro expands to `x` which seems to silence Visual C++ just fine. It's not enough for Clang however. With Clang, I usually use the `#pragma unused x` directive. The `UNUSED_ALWAYS` and `UNUSED` macros are defined in an artificial `windows.h` header which I control that contains a number of utilities to help Xcode compile Windows stuff. Is there a way to define `UNUSED(x)` to expand to `#pragma unused x`? I tried this, which Clang fails to accept: ``` #define UNUSED(x) #pragma unused(x) ``` I also tried: ``` #define UNUSED(x) (void)(x) ``` Which seems to work. Did I miss anything?