[PATCH 1/6] [MTD-UTILS] nandwrite: Qualifier Clean-up
Enrico Scholz
enrico.scholz at sigma-chemnitz.de
Tue Sep 9 13:14:42 EDT 2008
Grant Erickson <gerickson at nuovations.com> writes:
>>> +static const char *mtd_device, *img;
>>
>> would it be possible to split this into two declarations? I
>> really don't know if 'img' points to a constant or non-constant
>> char...
>
> As currently implemented, both mtd_device and img point to
> effectively read-only information. That is, there is no need to
> modify or to attempt to modify what they point to.
Sorry, I might be unclear here. My comment was about readability
not about correctness; e.g. without studying C standard, it is
not obvious to me, whether
| char const *a, *b;
means
| char const *a;
| char const *b;
or
| char const *a;
| char *b;
When you think that answer to this question is trivial, then
please explain 'char * const *a, *b;' ;)
>>> -int main(int argc, char **argv)
>>> +int main(int argc, char * const argv[])
>>
>> Is this really correct? C standard mentions only
>>
>> int main(void) { /* ... */ }
>> int main(int argc, char *argv[]) { /* ... */ }
>>
>> as program entry points. I suggest to cast 'argv' to a corresponding
>> data type when it is used.
>
> Those are certainly the two most common prototypes for main. However,
> because main has no prototype
Compiler knows about the two possible prototypes. Perhaps next gcc
version or another compiler (icc) complains about the non-standard
main().
> adding the const qualifier simply conveys current program
> intent. That is, the strings pointed to by argv are not
> modified.
Then, you can write
| int main(int argc, char const * const argv[])
;)
fwiw, the const'ness if argv[] content is violated when calling
GNU getopt(3) as it reorders arguments. E.g.
| argv[] = { "foo", "-a", "bar", "-c", NULL }
is changed by this function to
| argv[] = { "foo", "-a", "-c", "bar", NULL }
Enrico
More information about the linux-mtd
mailing list