I saw one example

int x = 10;
int y = 5;

bool isGreater = x > y;

printf("%d", isGreater);

But I could write this

int x = 10;
int y = 5;

printf("%d", x > y);

I am a complete beginner and I have no real reason why I would or would not want to deal with boolean variables, but I want to understand their raison d’être.

Edit: typo city

  • hendrik@palaver.p3x.de
    link
    fedilink
    English
    arrow-up
    3
    ·
    23 hours ago

    Sure. As far as I remember in C, 0 is False. Every other number is True, you can use 1 or 42, doesn’t matter, they’re all “true”.

      • durinn@programming.devOP
        link
        fedilink
        English
        arrow-up
        3
        ·
        22 hours ago

        But I think one has to keep apart return codes that are signals to the OS and the end user, and 1/0 in a true/false context in conditional statements.

      • hendrik@palaver.p3x.de
        link
        fedilink
        English
        arrow-up
        2
        ·
        edit-2
        12 hours ago

        The way I make sense of it, is we sometimes return failure (i.e. from main). So 0 is no failure (aka success) and we can use the same thinking. The correct, expressive way to write it is probably use “EXIT_SUCCESS” and skip the ones and zeros. Pretty sure this comes from Unix. And with a lot of the other functions in cstdlib it’s the same way as using integers as booleans. For example a “malloc()” will either return your memory or a null pointer and the 0 is the special failure case.

        But IMO the programming language shows its age and the context it was used in. More modern programming language design tends to be more strict with the types. Differentiate between interfacing with Unix stuff and other kinds of values. And we got more powerful concepts to deal with errors. So we don’t always have to abuse the zero to say we ended up in some special case.

        • CameronDev@programming.dev
          link
          fedilink
          arrow-up
          2
          ·
          11 hours ago

          Malloc return 0 is a failure, but open return 0 is success. It’s just inconsistent, and it’s definitely an age and context thing.

          Rust’s Result api are a pretty great solution. Not sure what other options are out there though.

    • OwOarchist@pawb.social
      link
      fedilink
      English
      arrow-up
      3
      ·
      22 hours ago

      Okay, now… variableA = 1 (true) and variableB = 42 (true). Suppose we want to compare the values of them to see if they’re the same or different. A simple check of if variableA == variableB will return False, because while they’re both set to ‘true’, they’re set to different values of ‘true’. It could get problematic and become a way to introduce really weird bugs.