Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Programming Lesson of the Day

Programming Lesson of the Day

Scheduled Pinned Locked Moved The Lounge
c++question
44 Posts 21 Posters 0 Views 1 Watching
  • 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.
  • D den2k88

    X & Y

    is not the same as

    X && Y

    Twenty minutes wasted on a condition who refused to yield the correct result.

    CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

    T Offline
    T Offline
    TheGreatAndPowerfulOz
    wrote on last edited by
    #6

    Details! Details!

    #SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun

    1 Reply Last reply
    0
    • OriginalGriffO OriginalGriff

      And I've learned something today! Thank you - I didn't know that. :thumbsup:

      Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

      M Offline
      M Offline
      MacSpudster
      wrote on last edited by
      #7

      All of @OriginalGriff 's Today points should be assigned to @RichardDeeming... ;P

      Richard DeemingR 1 Reply Last reply
      0
      • M MacSpudster

        All of @OriginalGriff 's Today points should be assigned to @RichardDeeming... ;P

        Richard DeemingR Offline
        Richard DeemingR Offline
        Richard Deeming
        wrote on last edited by
        #8

        Why limit it to today? :-\


        "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

        "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

        J 1 Reply Last reply
        0
        • OriginalGriffO OriginalGriff

          Programming Lesson of the Day #2: If you'd used C# it wouldn't have compiled ... :laugh:

          Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

          K Offline
          K Offline
          KarstenK
          wrote on last edited by
          #9

          Depending on the correct implementation of the "&" and "&&" operators in a fat class it shouldnt be the same :rolleyes:

          Press F1 for help or google it. Greetings from Germany

          D 1 Reply Last reply
          0
          • D den2k88

            X & Y

            is not the same as

            X && Y

            Twenty minutes wasted on a condition who refused to yield the correct result.

            CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

            P Offline
            P Offline
            PIEBALDconsult
            wrote on last edited by
            #10

            den2k88 wrote:

            refused to yield the correct expected result.

            FTFY

            D 1 Reply Last reply
            0
            • OriginalGriffO OriginalGriff

              And I've learned something today! Thank you - I didn't know that. :thumbsup:

              Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

              J Offline
              J Offline
              Jeremy Falcon
              wrote on last edited by
              #11

              Just to expand on Richard's point... I'm more of a C guy than C#, but like with C/C++ I can only assume that in this case, the compiler is doing a binary operation of AND, and 1 (or any non-zero) AND 0 is always going to be zero, which is expressed as false in this case. It's the difference between a bitwise operator and a logical one.

              Jeremy Falcon

              OriginalGriffO D 2 Replies Last reply
              0
              • Richard DeemingR Richard Deeming

                Why limit it to today? :-\


                "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                J Offline
                J Offline
                Jeremy Falcon
                wrote on last edited by
                #12

                Because we don't want him to stop posting his thoughts of the day... we need this... our precious. :~

                Jeremy Falcon

                1 Reply Last reply
                0
                • J Jeremy Falcon

                  Just to expand on Richard's point... I'm more of a C guy than C#, but like with C/C++ I can only assume that in this case, the compiler is doing a binary operation of AND, and 1 (or any non-zero) AND 0 is always going to be zero, which is expressed as false in this case. It's the difference between a bitwise operator and a logical one.

                  Jeremy Falcon

                  OriginalGriffO Offline
                  OriginalGriffO Offline
                  OriginalGriff
                  wrote on last edited by
                  #13

                  That's why C# didn't adopt the C convention that any non-zero value is true: you can't treat an integer as a boolean directly. Hence why I assumed that the compiler would complain, it does with

                  if (myInt = 6)
                  ...

                  because an integer isn't a boolean value

                  Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                  "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                  "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                  J N 2 Replies Last reply
                  0
                  • OriginalGriffO OriginalGriff

                    That's why C# didn't adopt the C convention that any non-zero value is true: you can't treat an integer as a boolean directly. Hence why I assumed that the compiler would complain, it does with

                    if (myInt = 6)
                    ...

                    because an integer isn't a boolean value

                    Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                    J Offline
                    J Offline
                    Jeremy Falcon
                    wrote on last edited by
                    #14

                    Oh I hear ya man. I reckon the difference being the compiler knows that's an assignment operator. My understanding of the way C# and Java does things is to create an object where needed from literals / constants / expressions. So, it would be more like this...

                    "Hello, world!".ToUpper()

                    ...just instead of a string it's a false... which gets treated like a boolean.

                    Jeremy Falcon

                    I J 2 Replies Last reply
                    0
                    • OriginalGriffO OriginalGriff

                      That's why C# didn't adopt the C convention that any non-zero value is true: you can't treat an integer as a boolean directly. Hence why I assumed that the compiler would complain, it does with

                      if (myInt = 6)
                      ...

                      because an integer isn't a boolean value

                      Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                      N Offline
                      N Offline
                      Nelek
                      wrote on last edited by
                      #15

                      the integer is not a boolean, but the "success" of the value assignment can be taken as a bool I have had problems with that several times in my career. That's why I got used to put constants in first place. if (6 = myInt) is going to throw an error in many more cases as the other possibility.

                      M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you Rating helpful answers is nice, but saying thanks can be even nicer.

                      1 Reply Last reply
                      0
                      • J Jeremy Falcon

                        Oh I hear ya man. I reckon the difference being the compiler knows that's an assignment operator. My understanding of the way C# and Java does things is to create an object where needed from literals / constants / expressions. So, it would be more like this...

                        "Hello, world!".ToUpper()

                        ...just instead of a string it's a false... which gets treated like a boolean.

                        Jeremy Falcon

                        I Offline
                        I Offline
                        irneb
                        wrote on last edited by
                        #16

                        Jeremy Falcon wrote:

                        I reckon the difference being the compiler knows that's an assignment operator.

                        Nope, it's because both C# and Java are more type safe (strong typed) than C is. In this case they define a boolean type, C just interprets an integer to have similar "meaning" to a boolean. And the if statement (in C#/Java) requires a boolean input argument. It's the same sort of situation as sending a string into a function which expected a float - compiler error - wrong type. This is an example of where C uses a weak typing system. It generally just uses the raw data as if it's in the expected type. Effectively turning it into a raw type-cast. The more strongly typed languages disallow most of these, probably because they tend to be the reason behind lots of bugs (if not most).

                        OriginalGriffO D J 3 Replies Last reply
                        0
                        • D den2k88

                          X & Y

                          is not the same as

                          X && Y

                          Twenty minutes wasted on a condition who refused to yield the correct result.

                          CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                          K Offline
                          K Offline
                          Kirill Illenseer
                          wrote on last edited by
                          #17

                          Actually, the result is the same. The side-effects aren't. At least in C#. In C, with it's enforced type-unsafety, the result can be extremey weird and the compiler won't do jack to even warn you.

                          D 1 Reply Last reply
                          0
                          • I irneb

                            Jeremy Falcon wrote:

                            I reckon the difference being the compiler knows that's an assignment operator.

                            Nope, it's because both C# and Java are more type safe (strong typed) than C is. In this case they define a boolean type, C just interprets an integer to have similar "meaning" to a boolean. And the if statement (in C#/Java) requires a boolean input argument. It's the same sort of situation as sending a string into a function which expected a float - compiler error - wrong type. This is an example of where C uses a weak typing system. It generally just uses the raw data as if it's in the expected type. Effectively turning it into a raw type-cast. The more strongly typed languages disallow most of these, probably because they tend to be the reason behind lots of bugs (if not most).

                            OriginalGriffO Offline
                            OriginalGriffO Offline
                            OriginalGriff
                            wrote on last edited by
                            #18

                            :thumbsup:

                            Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

                            "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                            "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                            1 Reply Last reply
                            0
                            • K Kirill Illenseer

                              Actually, the result is the same. The side-effects aren't. At least in C#. In C, with it's enforced type-unsafety, the result can be extremey weird and the compiler won't do jack to even warn you.

                              D Offline
                              D Offline
                              den2k88
                              wrote on last edited by
                              #19

                              No. Example 2 & 4 is 0 2 && is 1 (true) In that case I needed the first form as I was checking for a flag in a flag register, but mistakenly used the second form due to, well, being the most common (althought not so much in my field, which requires the management of a lot of driverless hardware).

                              CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                              K 1 Reply Last reply
                              0
                              • P PIEBALDconsult

                                den2k88 wrote:

                                refused to yield the correct expected result.

                                FTFY

                                D Offline
                                D Offline
                                den2k88
                                wrote on last edited by
                                #20

                                "If I put in wrong data, will the result be correct?"

                                CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                                P 1 Reply Last reply
                                0
                                • K KarstenK

                                  Depending on the correct implementation of the "&" and "&&" operators in a fat class it shouldnt be the same :rolleyes:

                                  Press F1 for help or google it. Greetings from Germany

                                  D Offline
                                  D Offline
                                  den2k88
                                  wrote on last edited by
                                  #21

                                  Plain C operators - it was a stupid mistake from my part, on the same day I made at least 3 mistakes of >= vs >. It wasn just the day - in fact I'm on sick leave today due to a strong headache I've been coddling since yesterday evening. Probably I was starting to feel it's effects in the morning too :D

                                  CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                                  1 Reply Last reply
                                  0
                                  • J Jeremy Falcon

                                    Just to expand on Richard's point... I'm more of a C guy than C#, but like with C/C++ I can only assume that in this case, the compiler is doing a binary operation of AND, and 1 (or any non-zero) AND 0 is always going to be zero, which is expressed as false in this case. It's the difference between a bitwise operator and a logical one.

                                    Jeremy Falcon

                                    D Offline
                                    D Offline
                                    den2k88
                                    wrote on last edited by
                                    #22

                                    Precisely, since I'm using both in the same code (hw management) I made my Dumb Mistake Of The Day :D

                                    CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                                    1 Reply Last reply
                                    0
                                    • I irneb

                                      Jeremy Falcon wrote:

                                      I reckon the difference being the compiler knows that's an assignment operator.

                                      Nope, it's because both C# and Java are more type safe (strong typed) than C is. In this case they define a boolean type, C just interprets an integer to have similar "meaning" to a boolean. And the if statement (in C#/Java) requires a boolean input argument. It's the same sort of situation as sending a string into a function which expected a float - compiler error - wrong type. This is an example of where C uses a weak typing system. It generally just uses the raw data as if it's in the expected type. Effectively turning it into a raw type-cast. The more strongly typed languages disallow most of these, probably because they tend to be the reason behind lots of bugs (if not most).

                                      D Offline
                                      D Offline
                                      den2k88
                                      wrote on last edited by
                                      #23

                                      At the same time C# is too rigid, especially with data which may have to be taken as raw (like a read from another process' memory) and read differently depending on other circumstances. I had to develop a C# plugin for VS that allowed me to visualize 8 bits or 16 bits grayscale images taken from the memory of a debugged process, either completely raw with parameters (height, width, bitsperpixel) inserted manually or taken from a standard structure we use in our codebase, which was stored in memory. Doing the necessary casts was freaking tough and required craptons of code and workarounds, while with C it would have been immediate. I prefer the need of more attention of C towards the need of knowing a stupid framework as with .NET languages - a poorly documented framework BTW since while every method and object is documented there isn't single piece of documentation explaining WEHN to use a particular namespace/object instead of a similarly named one, which are the related structures/objects/methods... compare that to Win32 APIs documentation.

                                      CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                                      H I A 3 Replies Last reply
                                      0
                                      • D den2k88

                                        At the same time C# is too rigid, especially with data which may have to be taken as raw (like a read from another process' memory) and read differently depending on other circumstances. I had to develop a C# plugin for VS that allowed me to visualize 8 bits or 16 bits grayscale images taken from the memory of a debugged process, either completely raw with parameters (height, width, bitsperpixel) inserted manually or taken from a standard structure we use in our codebase, which was stored in memory. Doing the necessary casts was freaking tough and required craptons of code and workarounds, while with C it would have been immediate. I prefer the need of more attention of C towards the need of knowing a stupid framework as with .NET languages - a poorly documented framework BTW since while every method and object is documented there isn't single piece of documentation explaining WEHN to use a particular namespace/object instead of a similarly named one, which are the related structures/objects/methods... compare that to Win32 APIs documentation.

                                        CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                                        H Offline
                                        H Offline
                                        Herbie Mountjoy
                                        wrote on last edited by
                                        #24

                                        I find the strong typing of C# is more of a help than a hindrance. Back in my C days I would get into horrible tangles doing precisely what you are trying to do. An int is not a bool even though many programmers of the era would treat them alike. I still encounter data tables that have integers or even strings used as boolean values and it makes my skin crawl.

                                        We're philosophical about power outages here. A.C. come, A.C. go.

                                        E D 2 Replies Last reply
                                        0
                                        • D den2k88

                                          X & Y

                                          is not the same as

                                          X && Y

                                          Twenty minutes wasted on a condition who refused to yield the correct result.

                                          CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++*      Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"

                                          G Offline
                                          G Offline
                                          Gary Wheeler
                                          wrote on last edited by
                                          #25

                                          Don't feel bad. I once had a bug based on this very thing that took weeks to find.

                                          Software Zen: delete this;

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups