This is the mail archive of the gcc@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]

sizeof(array) with variable-length array parameter


Dear gcc users and developers, 

  This might be a stupid question, nevertheless...

  I've been wondering for a long time, why the behaviour of
variable-length arrays w.r.t. the sizeof operator is different
for local/auto variables and for function arguments (in C99):

#include <stdio.h>
void foo(int s, int a[s]) {
        printf("%u\n",sizeof a);
}
int main()
{
        int s=10,a[s];
        printf("%u\n",sizeof a);
        foo(sizeof a/sizeof a[0],a);
}

  The printf's produce very different results: the first one
returns "40" the other one returns 4, implying that the compiler
forgets that the size of the array is actually "s", not the size
of the pointer argument. Is it so difficult to make "sizeof a" 
return "s" in both cases?

  The info page on gcc-4.3 does refer to variable-length arrays
in the context of the function declaration:

"The length of an array is computed once when the storage is allocated
and is remembered for the scope of the array in case you access it
with `sizeof'."

  This behaviour is fortunately consistent with all versions of gcc
that I actively use (2.95-4.3), so this might be a C99 feature that
is not implemented correctly...

Regards,

Pjotr Kourzanov


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