Rule 19.7 - Function-like macro - Printable Version +- MISRA Discussion Forums (https://forum.misra.org.uk) +-- Forum: MISRA C (https://forum.misra.org.uk/forumdisplay.php?fid=4) +--- Forum: MISRA-C: 2004 rules (https://forum.misra.org.uk/forumdisplay.php?fid=17) +---- Forum: 6.19 Preprocessing Directives (https://forum.misra.org.uk/forumdisplay.php?fid=43) +---- Thread: Rule 19.7 - Function-like macro (/showthread.php?tid=861) |
Rule 19.7 - Function-like macro - patopat - 08-11-2011 I have a violation of MISRA 2004 Advisory Rule 19.7, Function-like macro defined: 'CONV' #define F_MIN (-0.5) #define F_MAX (0.5) #define CONV(x) ((int32_t) ((x) < F_MAX ? ((x) >= F_MIN ? (x)*0x80000000U : 0xFFFF8000U) : 0x7fff0000U)) int32_t myVariable = CONV(0.25); /* the preprocessor replace macro with the value 0x20000000 */ How I declare the macro CONV(), which is not a function but really a preprocessor task, to be compliant to MISRA ? BR, Pat Re: Rule 19.7 - Function-like macro - misra-c - 15-11-2011 Rule 19.7 is only intended to apply in situations where a function call would be permitted. As an example, a function call is not permitted in a constant-expression. Therefore Rule 19.7 does not apply to the initialisers for objects that have static storage duration, e.g. Code: static int32 myVariable = CONV(0.25); /* Rule 19.7 compliant - function not permitted here */ |