PDA

View Full Version : What kind of #if(compiler if) statements are available?




BadWolf13
Nov 6, 2010, 01:46 AM
I hope I explained that well, but I'm talking about the #if statements that you can put into code, which tells the compiler to only compile a section of code if the condition is met. I've noticed a bunch in the Apple-provided headers, and I'm wondering, is there some kind of resource about what kind of conditions are available to put into these compiler statements?



HiRez
Nov 6, 2010, 02:22 AM
All the standard C preprocessor directives should be available, including #if, #ifdef, #ifndef, #else, #elif and #endif. I don't think there's much that applies in an Objective-C context that would be different than in a straight C context.

http://en.wikipedia.org/wiki/C_preprocessor

EDIT: You'll notice there are some restrictions, for example you can't evaluate expressions using strings or floats, generally you can do that before the directive by defining a token and using #ifdef, or using an integer expression with #if.

BadWolf13
Nov 6, 2010, 10:22 AM
Thank you, I didn't know the term preprocessor, and that's exactly what I was looking at, but I don't think I explained my question very well. It's not the different preprocessor directives that I'm looking for, it's more the different expressions that I can put into a preprocessor #if statement. For example, in foundation.h, there's a conditional compilation based on the statement;

#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) || TARGET_OS_WIN32


The expressions used in this condition must have been defined at some point, so I'm wondering how I'm to know what kind of expressions/macros/constants I can use there. Is there some kind of listing, or guide to working with conditionals in XCode?

kainjow
Nov 6, 2010, 11:42 PM
You can command-click those in Xcode to find out where they're defined, which is:

/usr/include/TargetConditionals.h

Also see
/usr/include/AvailabilityMacros.h

BadWolf13
Nov 7, 2010, 12:06 PM
Thanks, that's a good idea, unfortunately when I ctrl-click on the macro, the "Jump to Definition" is greyed out? Could there be a setting in XCode that's preventing me from using this?

Also, a spotlight search won't find either of those two files that you listed. Back when I used Windows, there were "hidden files", does OXS do anything like that?