Можно ли опускать параметры макроса, когда они не нужны?

Допустим, уменя есть много повторяющегося кода, на проверку значения на NULL, и разные действия.

Решив сократить повторяющийся код, я написал несколько макросов:

#ifndef KODIK_IF_NULL_RETURN
/**
 * \brief Checks the VALUE and return RETURN_VALUE if the VALUE is NULL.
 * 
 * \param VALUE VALUE to check.
 */
#   define KODIK_IF_NULL_RETURN(VALUE, RETURN_VALUE)    \
    if (NULL == (VALUE)) {                              \
        return (RETURN_VALUE);                          \
    }
#endif // !KODIK_IF_NULL_RETURN

#ifndef KODIK_IF_NULL_RETURN_NULL
/**
 * \brief Checks the VALUE and return NULL if the value is NULL.
 * 
 * \param VALUE VALUE to check.
 */
#   define KODIK_IF_NULL_RETURN_NULL(VALUE) KODIK_IF_NULL_RETURN(VALUE, NULL)
#endif // !KODIK_IF_NULL_RETURN_NULL

#ifndef KODIK_IF_NULL_NO_RETURN
/**
 * \brief Checks the value and returns control to the calling code if the value is NULL.
 * 
 * \param VALUE value to check.
 */
#   define KODIK_IF_NULL_NO_RETURN(VALUE) KODIK_IF_NULL_RETURN(VALUE,)
#endif // !KODIK_IF_NULL_NO_RETURN

В данном случае, меня интересует, правильно ли опускать параметр в макросе KODIK_IF_NULL_NO_RETURN, или же лучше написать void вместо того что бы опускать значение?


Ответы (1 шт):

Автор решения: AlexGlebe

Ваш код не компилируется из-за круглых скобок. Они не опускаются, и создают ошибки.

return ();
error: expected expression before ‘)’ token

return (void);
error: expected expression before ‘;’ token

return (0);
warning: ‘return’ with a value, in function returning void

Проще не ставить скобки :

return RETURN_VALUE;

И с пустым аргументом будет всё правильно :

KODIK_IF_NULL_RETURN(VALUE,) =>
return ;
→ Ссылка