|
Hi,
Whilst testing my implementation of rule 4.2 with a simple example, I got a warning about rule 11.5. It is on the following simple example:
void main() {
char * x="abcd";
return;
}
that is automatically translated by CIL into the following C code, where one can notice a new cast.
void main() {
char *x;
x=(char *)"abcd";
}
the 11.5 warning concerns the assignment, where it complains that the attribute const has been lost.
Indeed, the rhs expression has type const char *, so this seems normal.
A correct writing would be:
void main() {
char *x;
char content[4]="abcd";
x=&content[0];
}
which does not generate the 11.5 warning as we have well typed the constant and assigned the first element's address into x.
BUT, now I get a warning about rule 9.2 explaining that I haven't a braced expression on the rhs of the assignement, to initialize the array!!
I can correct this by decomposing "abcd" into {'a','b','c','d''} which removes the last warning but gets tedious.
So my question is: does MISRA discourage programmers from using strings?
|