Rule 8-5-2: what about strings? - Printable Version +- MISRA Discussion Forums (https://forum.misra.org.uk) +-- Forum: MISRA C++ (https://forum.misra.org.uk/forumdisplay.php?fid=18) +--- Forum: MISRA C++:2008 rules (https://forum.misra.org.uk/forumdisplay.php?fid=19) +---- Forum: 6.8 Declarators (C++) (https://forum.misra.org.uk/forumdisplay.php?fid=137) +---- Thread: Rule 8-5-2: what about strings? (/showthread.php?tid=1394) |
Rule 8-5-2: what about strings? - jocob - 10-01-2018 struct Test { char str1[20]; char str2[20]; }; struct Test t = { "Hello", "World" }; LDRA flags this with 397 S (Array initialisation has insufficient items.) violation of 8-5-2 (Braces shall be used to indicate and match the structure in the non-zero initialization of arrays and structures.) Looking at the details of the rule in the guidelines, I see why: "The non-zero initialization of arrays or structures requires an explicit initializer for each element." It seems there should be an exception for initializing a character array with the string syntax, since: a. the unused characters are implicitly null character 0 b. there is no MISRA compliant way to explicitly add null characters to a "string" I think MISRA C 2004 has a similar problem, but I haven't looked at 2012 yet. Re: Rule 8-5-2: what about strings? - dg1980 - 11-01-2018 Hi, what´s the output of LDRA if you use this ugly alternative? Code: struct Test t = Re: Rule 8-5-2: what about strings? - misra cpp - 18-01-2018 You are correct that the example initializing using "Hello" etc. is a violation of 8-5-2 (and dg1980's example padded with '\0's is compliant). However, the first example would be compliant under MISRA C:2012 - it has the exception for strings. The next issue of MISRA C++ aims to remove unnecessary differences between MISRA C and C++, and this is likely to be a rule that will be modified for that reason - though they may still not be identical because there is a semantic difference between C and C++ for a statement like char str[4] = "abcd"; (its legal in C but a constraint error in C++) As a matter of etiquette, we don't encourage discussion of particular tool's behaviour on the Bulleting Board - good or bad |