This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Statement expressions problem returning arrays.


Andrew Haley wrote:
>Redirected to gcc-help.

Ok thanks, I thought gcc-help was for command line options and such.  I chopped down the quoted text to the case that works in gcc that you say is not valid:

>Jamax wrote:
>> struct copy { char buf[128]; };
>> #define copyof(str) &({ struct copy cp; strcpy(cp.buf, str); cp; }).buf[0]
>
>Don't do that: you'll be using buf outside its scope.  The scope of
>buf ends at the end of the block in which it is declared.

The page on statement expressions says the "value of the subexpression serves as the value of the entire construct".  So really it should be evaluating to a copy of buf, a copy of the struct, no?  It seems like a structure or an array of a specific size could be a value ...

Similar to:

struct timeval epochTime(void) {
   struct timeval result = { 0, 0 };
   return result;
}

... or is that also invalid ?!

>None of those is valid.  This is:
>
>#define copyof(STR) ({ char *p = malloc (strlen (STR) + 1); strcpy (p, STR); p; })

It seems like alloca should work and not leak memory like that (unless in a loop...).

Jam


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]