From: Johannes Schindelin Date: Thu, 02 Nov 2006 09:15:12 GMT Subject: Re: weird strncmp usage? Message-ID: In-Reply-To: <20061102065127.GA23105@coredump.intra.peff.net> Hi, On Thu, 2 Nov 2006, Jeff King wrote: > On Thu, Nov 02, 2006 at 01:44:36AM +0000, Andy Whitcroft wrote: > > > That said if you know its constant you can also use sizeof("foo") and > > that is done at compile time. Something like: > > > > #define strxcmp(x, y) strncmp((x), (y), sizeof((y)) > > You would, of course, need to use sizeof(y)-1 to avoid comparing the NUL > termination. :) > > This is a slightly dangerous macro, because it _only_ works for string > literals, but not pointers (which is fine in this case, but its > limitations need to be documented). It would be even better to avoid these errors by doing something like #define starts_with(x, y) !strncmp((x), #y, sizeof(#y) - 1) which would be used like this: if (starts_with(arg, --abbrev=)) However, in this case, you would need another macro, which automatically extracts the argument, and soon you will end up with yet another getopt package. Ciao, Dscho