Можно ли опускать параметры макроса, когда они не нужны?
Допустим, уменя есть много повторяющегося кода, на проверку значения на 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 ;