• filtoid@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    6 days ago

    I’m going to take a shot at answering this, but please bear in mind that it’s been a long time since I looked into the C pre-parser.

    #if allows for arbitrary Boolean logic, eg #if build_env “local”

    #if defined us to see if a thing has been defined already, quite often used to make sure that a header file is only imported once, redeclaration of headers is a compiler error. Eg. #if !defined(__SOME_UNIQUE_FILE_IDENTIFIER) (then define the class) then write your #endif

    #ifdef wasn’t always standard and was added later in the ANSI spec be a keyword, it’s shorthand for the same thing as #if defined. -

    This is my understanding anyway, I’m going with the principal that someone who knows more will be more likely to post a rebuttal (which I encourage).

    • smpl@discuss.tchncs.de
      link
      fedilink
      English
      arrow-up
      1
      ·
      5 days ago

      The standard agrees with you that #ifdef and #ifndef are equal to #if defined and #if !defined, but your #if build_env "local" example does not make much sense the me. #if only takes constant expressions which can be evaluated at translation time. It can’t compare strings.