Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Special Interest Groups
  3. C++ Gurus
  4. Boolean in C
QtWS25 Last Chance

Boolean in C

Scheduled Pinned Locked Moved Unsolved C++ Gurus
34 Posts 11 Posters 5.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    Ketan__Patel__0011
    wrote on 23 Oct 2021, 11:25 last edited by Ketan__Patel__0011
    #9
    typedef bool boolean;
    int main()
    {
         boolean A = false;
         if (A == false) printf("MESSAGE")
         else  printf("MESSAGE")
    
         return 0;
    }
    

    if your problem is solved then please close the thread

    1 Reply Last reply
    0
    • K Offline
      K Offline
      Kent-Dorfman
      wrote on 25 Oct 2021, 05:22 last edited by
      #10

      comparing a boolean to true or false is redundant. Conditional expressions return a boolean (in C, 0 or not 0) so X or !X is adequate.

      Also, bool is a C99 thing via <stdbool.h>. Much C legacy still exists where there is no real boolean type but instead zero or not zero logic.

      K 1 Reply Last reply 25 Oct 2021, 13:56
      2
      • K Kent-Dorfman
        25 Oct 2021, 05:22

        comparing a boolean to true or false is redundant. Conditional expressions return a boolean (in C, 0 or not 0) so X or !X is adequate.

        Also, bool is a C99 thing via <stdbool.h>. Much C legacy still exists where there is no real boolean type but instead zero or not zero logic.

        K Offline
        K Offline
        kshegunov
        Moderators
        wrote on 25 Oct 2021, 13:56 last edited by
        #11

        @Kent-Dorfman said in Boolean in C:

        comparing a boolean to true or false is redundant.

        Not to mention wrong, generally speaking. 1 evaluates to true but so does -1, so comparing against true is simply the way to break it. Enums implicitly decay to the underlying type so checking against condition and !condition is the correct way to do it, even if a typedef is used.

        Read and abide by the Qt Code of Conduct

        1 Reply Last reply
        1
        • S Offline
          S Offline
          sierdzio
          Moderators
          wrote on 26 Oct 2021, 11:30 last edited by
          #12

          I find it much easier to understand if something is false when I see if (something == false) than when I see if (!something). Especially in longer expressions it is very easy to miss a single character like ! and read the code wrong.

          (Z(:^

          J J 2 Replies Last reply 26 Oct 2021, 11:37
          2
          • S sierdzio
            26 Oct 2021, 11:30

            I find it much easier to understand if something is false when I see if (something == false) than when I see if (!something). Especially in longer expressions it is very easy to miss a single character like ! and read the code wrong.

            J Offline
            J Offline
            JonB
            wrote on 26 Oct 2021, 11:37 last edited by JonB
            #13

            @sierdzio
            I see a personal-choice-disagreement debate looming... ;-)

            I do agree it is "unfortunate" that C chose just that little ! for "not". But personally I never write == false or != false, because I would never "say" that in RL....

            1 Reply Last reply
            0
            • S sierdzio
              26 Oct 2021, 11:30

              I find it much easier to understand if something is false when I see if (something == false) than when I see if (!something). Especially in longer expressions it is very easy to miss a single character like ! and read the code wrong.

              J Offline
              J Offline
              J.Hilk
              Moderators
              wrote on 26 Oct 2021, 11:37 last edited by
              #14

              @sierdzio , @JonB

              are you guys aware, that not is a valid keyword in c++ ?

              https://en.cppreference.com/w/cpp/keyword/not


              Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


              Q: What's that?
              A: It's blue light.
              Q: What does it do?
              A: It turns blue.

              J S K 3 Replies Last reply 26 Oct 2021, 11:45
              1
              • J J.Hilk
                26 Oct 2021, 11:37

                @sierdzio , @JonB

                are you guys aware, that not is a valid keyword in c++ ?

                https://en.cppreference.com/w/cpp/keyword/not

                J Offline
                J Offline
                JonB
                wrote on 26 Oct 2021, 11:45 last edited by JonB
                #15

                @J-Hilk
                Yup. And it's devil's-spawn! ;-) [Same for and & or. If I wanted to program in Python or Pascal I would have picked that.] I would never use that, as "nobody" (most people) else uses it or knows about it, so I would regard it as an anti-pattern!

                1 Reply Last reply
                0
                • J J.Hilk
                  26 Oct 2021, 11:37

                  @sierdzio , @JonB

                  are you guys aware, that not is a valid keyword in c++ ?

                  https://en.cppreference.com/w/cpp/keyword/not

                  S Offline
                  S Offline
                  sierdzio
                  Moderators
                  wrote on 26 Oct 2021, 11:46 last edited by
                  #16

                  @J-Hilk said in Boolean in C:

                  @sierdzio , @JonB

                  are you guys aware, that not is a valid keyword in c++ ?

                  https://en.cppreference.com/w/cpp/keyword/not

                  Yes but not in all compilers :-( MSVC does not recognize it.

                  (Z(:^

                  J J 2 Replies Last reply 26 Oct 2021, 11:47
                  1
                  • S sierdzio
                    26 Oct 2021, 11:46

                    @J-Hilk said in Boolean in C:

                    @sierdzio , @JonB

                    are you guys aware, that not is a valid keyword in c++ ?

                    https://en.cppreference.com/w/cpp/keyword/not

                    Yes but not in all compilers :-( MSVC does not recognize it.

                    J Offline
                    J Offline
                    JonB
                    wrote on 26 Oct 2021, 11:47 last edited by
                    #17

                    @sierdzio
                    Good, but are you sure? Since it is valid since C99, I would have thought that MSVC would accept those?

                    S 1 Reply Last reply 26 Oct 2021, 11:49
                    0
                    • J JonB
                      26 Oct 2021, 11:47

                      @sierdzio
                      Good, but are you sure? Since it is valid since C99, I would have thought that MSVC would accept those?

                      S Offline
                      S Offline
                      sierdzio
                      Moderators
                      wrote on 26 Oct 2021, 11:49 last edited by
                      #18

                      @JonB said in Boolean in C:

                      @sierdzio
                      Good, but are you sure? Since it is valid since C99, I would have thought that MSVC would accept those?

                      Last time I tried was last year. Clang, GCC all are 100% fine with it, MSVC was throwing errors.

                      I now see it's supposed to be defined in some iso646.h header, I never included it, perhaps that's the reason.

                      (Z(:^

                      J 1 Reply Last reply 26 Oct 2021, 11:52
                      1
                      • S sierdzio
                        26 Oct 2021, 11:46

                        @J-Hilk said in Boolean in C:

                        @sierdzio , @JonB

                        are you guys aware, that not is a valid keyword in c++ ?

                        https://en.cppreference.com/w/cpp/keyword/not

                        Yes but not in all compilers :-( MSVC does not recognize it.

                        J Offline
                        J Offline
                        J.Hilk
                        Moderators
                        wrote on 26 Oct 2021, 11:50 last edited by
                        #19

                        @sierdzio said in Boolean in C:

                        Yes but not in all compilers :-( MSVC does not recognize it.

                        VS been nonconforming! 😱 Color me surprised 😉


                        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                        Q: What's that?
                        A: It's blue light.
                        Q: What does it do?
                        A: It turns blue.

                        1 Reply Last reply
                        1
                        • S sierdzio
                          26 Oct 2021, 11:49

                          @JonB said in Boolean in C:

                          @sierdzio
                          Good, but are you sure? Since it is valid since C99, I would have thought that MSVC would accept those?

                          Last time I tried was last year. Clang, GCC all are 100% fine with it, MSVC was throwing errors.

                          I now see it's supposed to be defined in some iso646.h header, I never included it, perhaps that's the reason.

                          J Offline
                          J Offline
                          JonB
                          wrote on 26 Oct 2021, 11:52 last edited by
                          #20

                          @sierdzio
                          If one has to include a header file for them, makes me wonder if they are not "part of the language", just should be available if you include the header. Are they just #defines in that file??

                          S 1 Reply Last reply 26 Oct 2021, 11:54
                          1
                          • J JonB
                            26 Oct 2021, 11:52

                            @sierdzio
                            If one has to include a header file for them, makes me wonder if they are not "part of the language", just should be available if you include the header. Are they just #defines in that file??

                            S Offline
                            S Offline
                            sierdzio
                            Moderators
                            wrote on 26 Oct 2021, 11:54 last edited by
                            #21

                            @JonB said in Boolean in C:

                            @sierdzio
                            If one has to include a header file for them, makes me wonder if they are not "part of the language", just should be available if you include the header. Are they just #defines in that file??

                            yup :D

                            #define and    &&
                            #define and_eq &=
                            #define bitand &
                            #define bitor  |
                            #define compl  ~
                            #define not    !
                            #define not_eq !=
                            #define or     ||
                            #define or_eq  |=
                            #define xor    ^
                            #define xor_eq ^=
                            

                            They are not actual C++ language reserved keywords.

                            (Z(:^

                            J 1 Reply Last reply 26 Oct 2021, 12:10
                            1
                            • S sierdzio
                              26 Oct 2021, 11:54

                              @JonB said in Boolean in C:

                              @sierdzio
                              If one has to include a header file for them, makes me wonder if they are not "part of the language", just should be available if you include the header. Are they just #defines in that file??

                              yup :D

                              #define and    &&
                              #define and_eq &=
                              #define bitand &
                              #define bitor  |
                              #define compl  ~
                              #define not    !
                              #define not_eq !=
                              #define or     ||
                              #define or_eq  |=
                              #define xor    ^
                              #define xor_eq ^=
                              

                              They are not actual C++ language reserved keywords.

                              J Offline
                              J Offline
                              JonB
                              wrote on 26 Oct 2021, 12:10 last edited by
                              #22

                              @sierdzio
                              Hmmmm.... So does gcc have these in some header file, or does their C++ actually have them as reserved? It does have an iso646.h file, with the #defines, yet you said they worked for you in gcc without you explicitly including that? Does it include it automatically or from something else?

                              J 1 Reply Last reply 26 Oct 2021, 12:15
                              1
                              • J JonB
                                26 Oct 2021, 12:10

                                @sierdzio
                                Hmmmm.... So does gcc have these in some header file, or does their C++ actually have them as reserved? It does have an iso646.h file, with the #defines, yet you said they worked for you in gcc without you explicitly including that? Does it include it automatically or from something else?

                                J Offline
                                J Offline
                                J.Hilk
                                Moderators
                                wrote on 26 Oct 2021, 12:15 last edited by
                                #23

                                @JonB said in Boolean in C:

                                worked for you in gcc without you explicitly including that? Does it include it automatically or from something else

                                This header was originally in the C standard library as <iso646.h>.
                                Compatibility header, in C defines alternative operator representations which are keywords in C++.
                                This means that in a conforming implementation, including this header has no effect.
                                

                                gcc has mostly a conforming implementation, at least in this regard


                                Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                Q: What's that?
                                A: It's blue light.
                                Q: What does it do?
                                A: It turns blue.

                                J 1 Reply Last reply 26 Oct 2021, 12:17
                                2
                                • J J.Hilk
                                  26 Oct 2021, 12:15

                                  @JonB said in Boolean in C:

                                  worked for you in gcc without you explicitly including that? Does it include it automatically or from something else

                                  This header was originally in the C standard library as <iso646.h>.
                                  Compatibility header, in C defines alternative operator representations which are keywords in C++.
                                  This means that in a conforming implementation, including this header has no effect.
                                  

                                  gcc has mostly a conforming implementation, at least in this regard

                                  J Offline
                                  J Offline
                                  JonB
                                  wrote on 26 Oct 2021, 12:17 last edited by
                                  #24

                                  @J-Hilk said in Boolean in C:

                                  This header was originally in the C standard library as <iso646.h>.

                                  So what file is this in, which you say is included automatically?

                                  jsulmJ J 2 Replies Last reply 26 Oct 2021, 12:19
                                  0
                                  • J JonB
                                    26 Oct 2021, 12:17

                                    @J-Hilk said in Boolean in C:

                                    This header was originally in the C standard library as <iso646.h>.

                                    So what file is this in, which you say is included automatically?

                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on 26 Oct 2021, 12:19 last edited by
                                    #25

                                    @JonB said in Boolean in C:

                                    which you say is included automatically?

                                    My understanding is that it is NOT included automatically in conforming C++ implementations because those understand these words as keywords and don't need this header file (which is only there for compatibility reasons).

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    J 1 Reply Last reply 26 Oct 2021, 12:22
                                    2
                                    • J JonB
                                      26 Oct 2021, 12:17

                                      @J-Hilk said in Boolean in C:

                                      This header was originally in the C standard library as <iso646.h>.

                                      So what file is this in, which you say is included automatically?

                                      J Offline
                                      J Offline
                                      J.Hilk
                                      Moderators
                                      wrote on 26 Oct 2021, 12:22 last edited by
                                      #26

                                      @JonB I'm talking about the iso646.h @sierdzio mentioned

                                      https://en.cppreference.com/w/cpp/header/ciso646

                                      Probably the reason why MSVC doesn't have those as keywords but requires this header is, IIRC, that it doesn't have/use a dedicated c compiler for c headers and it would break legacy stuff if those were used as keywords


                                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                      Q: What's that?
                                      A: It's blue light.
                                      Q: What does it do?
                                      A: It turns blue.

                                      1 Reply Last reply
                                      1
                                      • jsulmJ jsulm
                                        26 Oct 2021, 12:19

                                        @JonB said in Boolean in C:

                                        which you say is included automatically?

                                        My understanding is that it is NOT included automatically in conforming C++ implementations because those understand these words as keywords and don't need this header file (which is only there for compatibility reasons).

                                        J Offline
                                        J Offline
                                        JonB
                                        wrote on 26 Oct 2021, 12:22 last edited by
                                        #27

                                        @jsulm
                                        Mine too. But I quote from @sierdzio above:

                                        Last time I tried was last year. Clang, GCC all are 100% fine with it, MSVC was throwing errors.

                                        I now see it's supposed to be defined in some iso646.h header, I never included it, perhaps that's the reason.

                                        My question is (should be) aimed at him: he says it worked automatically in GCC/Clang (but not MSVC) with no #include from him, that's what I'm trying to understand.

                                        1 Reply Last reply
                                        0
                                        • fcarneyF Offline
                                          fcarneyF Offline
                                          fcarney
                                          wrote on 26 Oct 2021, 21:22 last edited by
                                          #28

                                          I know Boolean is someone's name.
                                          But it kind of look like a diet fad to scare people skinny: boo-lean.

                                          C++ is a perfectly valid school of magic.

                                          jsulmJ 1 Reply Last reply 27 Oct 2021, 05:10
                                          0

                                          18/34

                                          26 Oct 2021, 11:49

                                          • Login

                                          • Login or register to search.
                                          18 out of 34
                                          • First post
                                            18/34
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved