On Sat, Jul 26, 2008 at 2:40 PM, Ivan Galic <[EMAIL PROTECTED]> wrote: > Hi, > > I've been writing a utility function for getting a path within the bundle > from the filename. For that, I used the function CFBundleCopyResourceURL, > which needs some CFStringRefs. I saw somewhere on the net an example like > this: > > CFSTR("somefile") > > and it worked fine. However, when I put it inside a function which takes > const char * parameters, it didn't: > > void SomeFunction(const char *filename) > { > ... > CFBundleCopyResourceURL(mainBundle, CFSTR(filename), ...); > > } > > I eventually solved the problem using CFStringCreateFromCString, but there's > one thing I don't understand. I thought a string literal should be treated > by the compiler just as const char*, but obviously it isn't. Further, I've > found in the CoreFoundation headers the definition of CFSTR which uses a > syntax I've never seen before: > > #ifdef __CONSTANT_CFSTRINGS__ > #define CFSTR(cStr) ((CFStringRef) __builtin___CFStringMakeConstantString > ("" cStr "")) > #else > #define CFSTR(cStr) __CFStringMakeConstantString("" cStr "") > #endif > > > Can anyone explain what do the double-double quotes mean? Is it something > Apple specific? I've never seen it before in a C program...
Look at the expansion when you do, say, CFSTR("somestring"): __builtin___CFStringMakeConstantString("" "somestring" "") You have three constant strings in a row (the first and last are just zero-length strings), and C concatenates adjacent constant strings. The question is then, why do they concatenate with zero-length strings, an operation which does nothing? The reason should become clear when you do, say, CFSTR(somevar): __builtin___CFStringMakeConstantString("" somevar "") Here you have a constant string, a variable, and another constant string. This is a syntax error. The error that it triggers is intentional. CFSTR is for creating constant, compile-time strings only, and this "" construction is a simple way to get the compiler to enforce it. Mike _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]