On Sun, Mar 21, 2004 at 02:20:13AM -0500, Matt Emmerton wrote: > >----- Original Message ----- >From: "Garance A Drosihn" <[EMAIL PROTECTED]> >To: <[EMAIL PROTECTED]> >Sent: Saturday, March 20, 2004 5:45 PM >Subject: Adventures with gcc: code vs object-code size >> if (strcmp(elemcopy, ":") == 0) ... >I don't know why the code bloats so much on i386, but I do question the use >of strcmp() for a single-character compare. >Something like the following would probably be better (and would avoid your >problem): > >if (elemcopy[0] == ':') > inf->count = 0; >else > inf->addelem(inf, elemcopy);
That code isn't equivalent in general. Your code just checks that the first character is ':'. It doesn't verify that the string is exactly one character long. It's possible that in this particular context, elemcopy may be constrained such that it must be ":" if the first character is ':' but this isn't clear from Garances posting. The equivalent code would be: if (elemcopy[0] == ':' && elemcopy[1] == '\0') inf->count = 0; else inf->addelem(inf, elemcopy); But (IMHO) this is a lot less clear than the former code (thought I admit I'm guilty of doing this quite a lot in my code). Note that a modern C compiler is free to convert strcpy(elemcopy, ":") == 0 into elemcopy[0] == ':' && elemcopy[1] == '\0' assuming the relevant header (<string.h>) is in scope. (I was under the impression that gcc did this). Peter _______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"