On Monday 11 January 2010 22:13:31 Rafał Miłecki wrote:
> 2010/1/10 Michael Buesch <[email protected]>:
> > On Sunday 10 January 2010 23:13:34 Rafał Miłecki wrote:
> >> + s32 results_min[4];
> >> + u8 vcm_final[4];
> >> + s32 results[4][4];
> >> + s32 miniq[4][2];
> >> + memset(results_min, 0, sizeof(s32) * 4);
> >> + memset(vcm_final, 0, sizeof(u8) * 4);
> >> + memset(results, 0, sizeof(s32) * 4 * 4);
> >> + memset(miniq, 0, sizeof(s32) * 4 * 2);
> >
> > Just initialize the variables to zero instead of doing a memset:
> >
> > + s32 results_min[4] = { 0, };
> > + u8 vcm_final[4] = { 0, };
> > + s32 results[4][4] = { 0, };
> > + s32 miniq[4][2] = { 0, };
>
> Nice trick, thanks :) Just for two-dimensional arrays I'll have to hack it to:
> s32 results[4][4] = { { 0, }, { 0, }, { 0, }, { 0, } };
> I believe.
No I don't think so.
It's C standard that uninitialized elements on automatic variables are
initialized
to zero, _if_ at least one element is initialized to something.
So if you init one element to 0, all others will be 0, too.
I think that should also work for multidimensional arrays. So my example
s32 results[4][4] = { 0, };
should do the right thing. Am I wrong?
Here's a test-program:
m...@maggie:~$ cat t.c
#include <stdio.h>
#include <stdint.h>
int main(void)
{
int i, j;
int32_t results[4][4]
#ifdef INIT_IT
= { 0, };
#else
;
#endif
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
printf("%d\n", results[i][j]);
}
m...@maggie:~$ gcc -o t t.c
m...@maggie:~$ ./t
0
0
0
1
-1077483840
0
0
0
-1077483824
268436224
268536212
0
-1077483776
268436888
268353524
0
m...@maggie:~$ gcc -D INIT_IT -o t t.c
m...@maggie:~$ ./t
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
--
Greetings, Michael.
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev