I was wondering if it was a good idea to replace do-while macros with static inline functions returning void, where appropriate ? By "where appropriate" I mean: a) call to macro contains no side-effects b) macro does not modify the arguments. c) macro does not use any preprocessor operators (like ##) d) macro does not get undefined or is conditionally defined. e) macro is not type independent (use inline template for these?) f) Any other case ?
Example: Consider C_EXPR_APPEND macro defined in c-tree.h: /* Append a new c_expr_t element to V. */ #define C_EXPR_APPEND(V, ELEM) \ do { \ c_expr_t __elem = (ELEM); \ vec_safe_push (V, __elem); \ } while (0) It is called at two places in c-parser.c: 0 c-parser.c <global> 6140 C_EXPR_APPEND (cexpr_list, expr); 1 c-parser.c <global> 6145 C_EXPR_APPEND (cexpr_list, expr); Shall be replaced by: static inline void C_EXPR_APPEND( vec<c_expr_t, va_gc> * V, c_expr_t ELEM) { vec_safe_push(V, ELEM); } I will volunteer to do it, if it's accepted. Thanks and Regards, Prathamesh