У меня возникли проблемы со следующим макросом, и я обнаружил, что оператор вставки токена (##
) использует пространство между static
и типом возврата:
#define MY_FUNCTION(aReturnType) static ##aReturnType MyFunction() { }
Итак, препроцессор поворачивал это:
MY_FUNCTION(bool)
в это:
staticbool MyFunction() { }
, что вызвало странные ошибки компиляции.
Мне пришла в голову идея поставить круглые скобки вокруг ключевого слова static
:
// This works but is kind of weird
#define MY_FUNCTION(aReturnType) (static) ##aReturnType MyFunction() { }
Есть ли лучшие решения?