From: John B. <bel...@cs...> - 2001-04-11 18:38:23
|
As long as we are pointing out problems in the macros, they should=20 really be: #define RSE_LEN(cnt) (sizeof (struct rse) + ((cnt) * sizeof (int *)) --or-- #define RSE_LEN(cnt) (sizeof (struct rse) + ( ((cnt) <=3D 0) ? 0 :=20 ((cnt) - 1)) * sizeof (int *)) Don't you love C :) -John On Wednesday, April 11, 2001, at 07:05 PM, Mark O'Donohue wrote: > Leyne, Sean wrote: > >> Mark, >> It may be my na=EFve reading of the C code but your last suggestion: >> #define RSE_LEN(cnt) (sizeof (struct rse) + (cnt * sizeof (int *)) >> is not correct in the case of CNT =3D 1. >> The original code was: >> #define RSE_LEN(cnt) (sizeof (struct rse) + (cnt - 1) * sizeof (int = *)) >> Using your example, the value would work out to be 64 instead of the >> original code's value of 60. > > Sorry your right it would be an extra 4 bytes allocated each time not=20= > one (sizeof(int*)). > > Maybe I should stick to java ;-), Im just not as on top of the C as I=20= > used to be (I even checked the % : stmt, since I recon I would use it=20= > about once a year). Mind you I hate this sort of coding anyway, even=20= > though C programs thrive on it, as it tends to lead itself to exactly=20= > the sort of error we've got here. > > Meanwhile, I'll just have to rely on peer review. > > Cheers > > Mark > > > > _______________________________________________ > Firebird-devel mailing list > Fir...@li... > http://lists.sourceforge.net/lists/listinfo/firebird-devel > |