• @csm10495@sh.itjust.works
    link
    fedilink
    English
    371 month ago

    Through the magic of make, you can write code that changes if statements to while loops then changes it back after compilation passes or fails.

    I only give good advice.

    • @aMockTie@lemmy.world
      link
      fedilink
      461 month ago

      Statements that start with # in C/C++ are known as preprocessor directives, that is, they are executed before compilation begins. OP has used a #define which will replace any instance of A (IF(x)) with B (while (x)) in the code.

      So the IF statement is really just a while statement.

    • @Reil@beehaw.org
      link
      fedilink
      English
      5
      edit-2
      1 month ago

      They used a macro to make ‘IF’ (which is distinctly not ‘if’) map to ‘while’. So it’s really a while(1) loop, which will repeat forever, or until the program is terminated, whichever comes first.

      Someone’s just being silly.

      • @LeFrog@discuss.tchncs.de
        link
        fedilink
        21 month ago

        Thx!

        ‘IF’ (which is distinctly not ‘if’)

        Is this something needed “for the meme” or something with this macro or C/C++? Or why the case-sensitivity here? I only know languages like Java, Python, JS. Unfortunately the ancient tongue is not known to me.

        • @Reil@beehaw.org
          link
          fedilink
          English
          11 month ago

          It’s not really that important to the joke, since I’m pretty sure you can also replace keywords like ‘if’ with the preprocessor. It’s just that preprocessor macros are typically (style, not syntax) ALL_CAPS_WITH_UNDERSCORES.

          It’s just another clue that that block isn’t actually an if-block, since C is case sensitive and ‘IF’ wouldn’t actually work.

    • qaz
      link
      fedilink
      English
      71 month ago

      That actually seemed quite useful at first.

    • @Vigge93@lemmy.world
      link
      fedilink
      01 month ago

      Your point about it not running when there is nothing to iterate over is incorrect. The else-statement runs when the iterator is exhausted; if the iterator empty, it is exhausted immediately and the else-statement is executed.

      • @lugal@sopuli.xyz
        link
        fedilink
        31 month ago

        I think it’s intended as “not only when” because it would make sense to have an “if empty” case but the way it is, it doesn’t make sense

        • @Vigge93@lemmy.world
          link
          fedilink
          4
          edit-2
          1 month ago

          I think it does make sense, it’s a “did this loop exit naturally? If so, do x”. This makes a lot of sense if you, for example, have a loop that checks a condition and breaks if that condition is met, e.g. finding the next item in a list. This allows for the else statement to set some default value to indicate that no match was found.

          Imo, the feature can be very useful under certain circumstances, but the syntax is very confusing, and thus it’s almost never a good idea to actually use it in code, since it decreases readability a lot for people not intimately familiar with the language.

          Edit: Now, this is just guessing, but what I assume happens under the hood is that the else statement is executed when the StopIteration exception is recieved, which happens when next() is called on an exhausted iterator (either empty or fully consumed)

          • @lugal@sopuli.xyz
            link
            fedilink
            11 month ago

            Thinking about it, it totally makes sense and has in inherent logic, even tho it’s not intuitive

          • @Saleh@feddit.org
            link
            fedilink
            1
            edit-2
            1 month ago

            Couldn’t you just handle this with:

            
            breakflag = False
            
            for x in iterator:
            
                 if breakcondition(x):
                        breakflag = True
                        break  
                 dostuff()
            
  • @brian@programming.dev
    link
    fedilink
    81 month ago

    found the following in our codebase the other day.

    while(booleanFlag)
        return;
    

    thhere wasn’t more in the loop body, that was it. the loop conditional does exist and it can hurt you.

    • Rikudou_Sage
      link
      fedilink
      41 month ago

      Can it hurt you, though? My guess would be every sane compiler and interpreter optimizes this.

  • Tamlyn
    link
    fedilink
    61 month ago

    i have a colleague always saying if loop (in our language). I’m a bit to shy to tell him his mistakes… People easily hate me but i would like to…

  • @raldone01@lemmy.world
    link
    fedilink
    2
    edit-2
    1 month ago

    I once went to the computer of a class mate and opened stdio.h and added #define while(x) if(x). He was so confused. 🤣