defined() not recognizing ## token paste in its operand (GNU extension)
When defined() appears inside a macro with ## op, syntaxError gets emitted.
error: failed to evaluate #if condition, undefined function-like macro invocation: defined( ... ) [syntaxError]
#if NRF_MODULE_ENABLED(FOO)
Reproducer: main.c
#define NRF_MODULE_ENABLED(module) \ (defined(module ## _ENABLED) && (module ## _ENABLED)) #define FOO_ENABLED 1 #if NRF_MODULE_ENABLED(FOO) int foo(void) { return 1; } #endif
This is caused by the DEFINED branch in expandToken, which doesn't match defined(A ## B), and makes the token 'defined(...)' fall through.