19.13 and Assembly - 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: 19.13 and Assembly (/showthread.php?tid=892) |
19.13 and Assembly - gs - 18-04-2012 Does the following code violate rule #19.13? Code: #define QWER { asm ASDF #$7F; } Re: 19.13 and Assembly - misra-c - 25-04-2012 The # preprocessing token in this example is not an instance of the # operator (see C90 Section 6.8.3.2) because this is an object-like macro definition, i.e. there are no macro parameters. Therefore, this code complies with Rule 19.13 as well as Rule 2.1 (encapsulation of assembly language). Of course, it would still require a deviation against Rule 1.1 as the asm keyword is a language extension. If the example had used a function-like macro definition, then the code would not be compliant with Rule 19.13 as the # token would be a # operator. Re: 19.13 and Assembly - gs - 25-04-2012 I am a little confused. Suppose the code reads like so: Code: #define QWER(x) { asm x ASDF #$7F; } Code: #define QWER(x) { asm ASDF #$7F; } Re: 19.13 and Assembly - misra-c - 27-04-2012 The presence of a parenthesised, possibly empty, parameter list in the definition of a macro makes it a function-like macro. See the C90 standard, Section 6.8.3. This means that all of: Code: #define QWER(x) { asm x ASDF #$7F; } The # preprocessing operator must be followed by a parameter (constraint C90 Section 6.8.3.2). Therefore none of the above examples is legal C. |