What kind of #if(compiler if) statements are available?

Discussion in 'Mac Programming' started by BadWolf13, Nov 5, 2010.

  1. macrumors 6502

    #1
    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?
     
  2. HiRez, Nov 6, 2010
    Last edited: Nov 6, 2010

    macrumors 601

    HiRez

    #2
    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.
     
  3. BadWolf13, Nov 6, 2010
    Last edited: Nov 6, 2010

    macrumors 6502

    #3
    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;

    Code:
    #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?
     
  4. Moderator emeritus

    kainjow

    #4
    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
     
  5. macrumors 6502

    #5
    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?
     

Share This Page