|
|
|
|
|
|
|
|
|
|
xen-devel
RE: [Xen-devel] mini-os: C programming
> -----Original Message-----
> From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
> [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of
> PUCCETTI Armand
> Sent: 15 March 2007 15:12
> To: Keir Fraser
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [Xen-devel] mini-os: C programming
>
> Keir Fraser a écrit :
> > On 15/3/07 13:39, "PUCCETTI Armand" <armand.puccetti@xxxxxx> wrote:
> >
> >
> >> extern char *stack;
> >>
> >
> > Yes, this one is bogus.
> >
> >
> >> 2. In file xen-3.0.3/extras/mini-os/gnttab.c:140: the
> const variable
> >> gnttabop_error_msgs
> >> is declared as
> >>
> >> static const char *gnttabop_error_msgs[] = GNTTABOP_error_msgs;
> >>
> >> shouldn't that instead be declared:
> >>
> >> static const char * const gnttabop_error_msgs[] =
> GNTTABOP_error_msgs;
> >>
> >
> > It doesn't really matter, does it? Personally I hate
> scattering 'const' all
> > over the place.
> >
> > -- Keir
> >
> >
> >
> It doesn't cause any crash probably, but according to the
> semantics that you
> wish gnttabop_error_msgs to have, all pointers of this array
> _should_ be
> constant
> (I guess you're not going to change the error messages dynamically)
> and not only the strings refered by these pointers. The type of both
> declarations
> is given by cdecl:
>
> $ cdecl
> char * const gnttabop_error_msgs[] ;
> declare gnttabop_error_msgs as array of const pointer to char;
>
> const char * gnttabop_error_msgs[];
> declare gnttabop_error_msgs as array of pointer to const char;
There are two different reasons to use const:
1. To tell the compiler to generate warnings when you change a const, e.g.
const int x = 7;
...
x = 42;
...
Should give a warning about changing the value of a const.
2. To give the compiler a clue to optimize code better. For example, the
initial declaraton of x = 7 can be replaced by the constant value 7 by the
compiler whenever it finds this as a more useful way to do things. Similarly, a
const character array passed into a function can be expected to not have
changed by the called function (so strcpy() for example isn't allowed to change
the second parameter, as it's a const).
I'm pretty sure most usages of const in Xen is for the purpose of the latter.
Of course, getting a compiler warning when you've modified something that is
supposed to be const isn't a bad thing.
In the case of error messages, it doesn't really make much sense whether the
compiler can generate the perfect code for it or not - it's going to take much
longer to actually put it in a human readable place (such as the screen or
serial port) than it takes to find the actual error message anyways. And I
think this is what Keir ment with "it doesn't matter".
Yes, setting the error message value for error 6 will not generate a compiler
warning (as long as the pointer to char you set it to is a "constant"), but
it's not a very likely thing to be done in the code anyways.
--
Mats
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
>
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|