In an example project, I defined the macro
#define FOO(x, y) x + y .
This works perfectly well. For example, FOO(42, 1337)
is evaluated to 1379
.
However, I now want to use another #define
:
#define SAMPLE 42, 1337
When I now call FOO(SAMPLE)
, this won't work. The compiler tells me that FOO
takes two arguments, but is only called with one argument.
I guess that the reason for this is that, although, the arguments of a macro are evaluated in advance of the function itself, that the preprocessor does not parse the whole instruction again after this evaluation. This is a similar to the fact that it is not possible to output additional preprocessor directives from a macro.
Is there any possibility to get the desired functionality?
Replacing the FOO
macro with a C function is not a possibility. The original macro is located in third party code I cannot change, and it outputs a comma-separated list of values to be directly used in array initializers. Therefore, a C function cannot replicate the same behaviour.
If it is not possible to accomplish this task by using simple means: How would you store the (x, y)
pairs in a maintainable form? In my case, there are 8 arguments. Therefore, storing the individual parts in separate #define
-s is also not easy maintainable.