Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to remove incorrect warning?
QtWS25 Last Chance

How to remove incorrect warning?

Scheduled Pinned Locked Moved Solved General and Desktop
29 Posts 6 Posters 5.4k 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.
  • E Engelard
    3 Dec 2018, 20:12

    This post is deleted!

    K Offline
    K Offline
    kshegunov
    Moderators
    wrote on 3 Dec 2018, 20:13 last edited by
    #18

    I can guarantee you you're never going to enter that branch. You're playing with fire. See my previous comment.

    Read and abide by the Qt Code of Conduct

    1 Reply Last reply
    0
    • K kshegunov
      3 Dec 2018, 20:10

      Your code is wrong, so that warning is very useful in fact.

      if (exitCode != reinterpret_cast<LPCVOID>(...))
      

      is nonsense. You can't (or rather shouldn't) cast integers to const void * ...
      What you should do instead is something like this:

      if (*exitCode != STILL_ACTIVE) { /* do something */ }
      

      reinterpret_cast is the one sure way to blow your leg off while trying to shoot yourself in the foot.

      E Offline
      E Offline
      Engelard
      wrote on 3 Dec 2018, 20:18 last edited by
      #19

      @kshegunov said in How to remove incorrect warning?:

      What you should do instead is something like this:
      if (exitCode != STILL_ACTIVE) { / do something */ }

      Nope

      Will be more warnings(first one actually, no matter what code you'll make, it screaming because of definition inside windows libraries). Your proposal:
      0_1543868290472_hhhhh.jpg

      K 1 Reply Last reply 3 Dec 2018, 20:23
      0
      • E Engelard
        3 Dec 2018, 20:18

        @kshegunov said in How to remove incorrect warning?:

        What you should do instead is something like this:
        if (exitCode != STILL_ACTIVE) { / do something */ }

        Nope

        Will be more warnings(first one actually, no matter what code you'll make, it screaming because of definition inside windows libraries). Your proposal:
        0_1543868290472_hhhhh.jpg

        K Offline
        K Offline
        kshegunov
        Moderators
        wrote on 3 Dec 2018, 20:23 last edited by
        #20

        Don't make me smack you; I've been doing programming all my life.

        Firstly, the warning is the least of your problems. You're giving a pointer to uninitialized memory block (i.e. null) as an output parameter. Then you're casting an integer to a memory address?
        How it works is as follows:

        DWORD exitCode;
        GetExitProces(..., &exitCode);
        if (exitCode != STILL_ACTIVE)  { /* blabla */ }
        

        If the warning is the only thing that bothers you, then cast the macro to the proper type explicitly:

        if (exitCode != static_cast<DWORD>(STILL_ACTIVE))  { /* more blabla */ }
        

        Read and abide by the Qt Code of Conduct

        E 1 Reply Last reply 3 Dec 2018, 20:37
        1
        • K kshegunov
          3 Dec 2018, 20:23

          Don't make me smack you; I've been doing programming all my life.

          Firstly, the warning is the least of your problems. You're giving a pointer to uninitialized memory block (i.e. null) as an output parameter. Then you're casting an integer to a memory address?
          How it works is as follows:

          DWORD exitCode;
          GetExitProces(..., &exitCode);
          if (exitCode != STILL_ACTIVE)  { /* blabla */ }
          

          If the warning is the only thing that bothers you, then cast the macro to the proper type explicitly:

          if (exitCode != static_cast<DWORD>(STILL_ACTIVE))  { /* more blabla */ }
          
          E Offline
          E Offline
          Engelard
          wrote on 3 Dec 2018, 20:37 last edited by
          #21

          @kshegunov said in How to remove incorrect warning?:

          If the warning is the only thing that bothers you, then cast the macro to the proper type explicitly:
          if (exitCode != static_cast<DWORD>(STILL_ACTIVE)) { /* more blabla */ }

          1. For last time. Yes, it's just was almost hundred in my app, now 0(if not mention that with STILL_ACTIVE).
          2. Your new example of static cast doing nothing, because in definition in win's.h it is already DWORD:

          0_1543869432495_stillwarning.jpg

          1 Reply Last reply
          0
          • J Offline
            J Offline
            JKSH
            Moderators
            wrote on 3 Dec 2018, 23:57 last edited by JKSH 12 Apr 2018, 02:03
            #22

            First, @kshegunov is right -- The "solution" is wrong because LPDWORD is unsigned long *. Your marked "solution" is like this:

            unsigned long *exitCode = ...
            unsigned long *checkCode = ...
            if (exitCode != checkCode) { /*do stuff*/ }
            

            Do you see the problem with comparing pointers?

            Second, @Engelard is right -- The warning exists because of macros in the Windows headers:

            // minwinbase.h
            #define STILL_ACTIVE     STATUS_PENDING
            
            // winnt.h
            #define STATUS_PENDING   ((DWORD)0x00000103L) // Old-style cast here, not in user code
            

            There's no way to cast this away in user code.

            Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

            E K 2 Replies Last reply 4 Dec 2018, 01:21
            2
            • J JKSH
              3 Dec 2018, 23:57

              First, @kshegunov is right -- The "solution" is wrong because LPDWORD is unsigned long *. Your marked "solution" is like this:

              unsigned long *exitCode = ...
              unsigned long *checkCode = ...
              if (exitCode != checkCode) { /*do stuff*/ }
              

              Do you see the problem with comparing pointers?

              Second, @Engelard is right -- The warning exists because of macros in the Windows headers:

              // minwinbase.h
              #define STILL_ACTIVE     STATUS_PENDING
              
              // winnt.h
              #define STATUS_PENDING   ((DWORD)0x00000103L) // Old-style cast here, not in user code
              

              There's no way to cast this away in user code.

              E Offline
              E Offline
              Engelard
              wrote on 4 Dec 2018, 01:21 last edited by Engelard 12 Apr 2018, 01:22
              #23

              @JKSH said in How to remove incorrect warning?:

              The marked "solution" is like this:

              It's not a proper solution.You just changed my example from DWORD pointer (which most proper unsigned int when working with winApi functions) to pointer of quite same type.
              My solution with LPDWORD more correct simply because function GetExitCodeProcess demand LPDWORD. There was some reason why guys from microsoft put exactly that type as parameter, not LPVOID or LPCVOID. So i just used that what they recommend. Or they put such types instead simple unsigned ints just for fun?

              @JKSH said in How to remove incorrect warning?:

              There's no way to cast this away in user code.

              Ye. And even such casting i consider as not a solution at all.
              Proper solution to whole thing would be - remove single warning(not whole type of that warning, because that value(0x00000103L) even through autoExplicitCast will never cause any error/crush to any kind of app which using such things like predefined variables which never will change it's values.

              J K 2 Replies Last reply 4 Dec 2018, 01:56
              -1
              • E Engelard
                4 Dec 2018, 01:21

                @JKSH said in How to remove incorrect warning?:

                The marked "solution" is like this:

                It's not a proper solution.You just changed my example from DWORD pointer (which most proper unsigned int when working with winApi functions) to pointer of quite same type.
                My solution with LPDWORD more correct simply because function GetExitCodeProcess demand LPDWORD. There was some reason why guys from microsoft put exactly that type as parameter, not LPVOID or LPCVOID. So i just used that what they recommend. Or they put such types instead simple unsigned ints just for fun?

                @JKSH said in How to remove incorrect warning?:

                There's no way to cast this away in user code.

                Ye. And even such casting i consider as not a solution at all.
                Proper solution to whole thing would be - remove single warning(not whole type of that warning, because that value(0x00000103L) even through autoExplicitCast will never cause any error/crush to any kind of app which using such things like predefined variables which never will change it's values.

                J Offline
                J Offline
                JKSH
                Moderators
                wrote on 4 Dec 2018, 01:56 last edited by JKSH 12 Apr 2018, 03:13
                #24

                @Engelard said in How to remove incorrect warning?:

                My solution with LPDWORD more correct simply because function GetExitCodeProcess demand LPDWORD.

                It is correct to pass an LPDWORD parameter into GetExitCodeProcess().

                It is wrong to use == or != to compare two LPDWORD variables because it is wrong to use == or != to compare pointers. Do you agree?

                Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                E 1 Reply Last reply 4 Dec 2018, 14:20
                1
                • J JKSH
                  3 Dec 2018, 23:57

                  First, @kshegunov is right -- The "solution" is wrong because LPDWORD is unsigned long *. Your marked "solution" is like this:

                  unsigned long *exitCode = ...
                  unsigned long *checkCode = ...
                  if (exitCode != checkCode) { /*do stuff*/ }
                  

                  Do you see the problem with comparing pointers?

                  Second, @Engelard is right -- The warning exists because of macros in the Windows headers:

                  // minwinbase.h
                  #define STILL_ACTIVE     STATUS_PENDING
                  
                  // winnt.h
                  #define STATUS_PENDING   ((DWORD)0x00000103L) // Old-style cast here, not in user code
                  

                  There's no way to cast this away in user code.

                  K Offline
                  K Offline
                  kshegunov
                  Moderators
                  wrote on 4 Dec 2018, 08:14 last edited by
                  #25

                  @JKSH said in How to remove incorrect warning?:

                  Second, @Engelard is right -- The warning exists because of macros in the Windows headers

                  Indeed, I saw that, but decided that it's not worth continuing on with the argument if the code's wrong. I mean wanting to fix the clang warning is fine, but it's more important to fix the actual code.

                  Read and abide by the Qt Code of Conduct

                  1 Reply Last reply
                  0
                  • E Engelard
                    4 Dec 2018, 01:21

                    @JKSH said in How to remove incorrect warning?:

                    The marked "solution" is like this:

                    It's not a proper solution.You just changed my example from DWORD pointer (which most proper unsigned int when working with winApi functions) to pointer of quite same type.
                    My solution with LPDWORD more correct simply because function GetExitCodeProcess demand LPDWORD. There was some reason why guys from microsoft put exactly that type as parameter, not LPVOID or LPCVOID. So i just used that what they recommend. Or they put such types instead simple unsigned ints just for fun?

                    @JKSH said in How to remove incorrect warning?:

                    There's no way to cast this away in user code.

                    Ye. And even such casting i consider as not a solution at all.
                    Proper solution to whole thing would be - remove single warning(not whole type of that warning, because that value(0x00000103L) even through autoExplicitCast will never cause any error/crush to any kind of app which using such things like predefined variables which never will change it's values.

                    K Offline
                    K Offline
                    kshegunov
                    Moderators
                    wrote on 4 Dec 2018, 08:28 last edited by kshegunov 12 Apr 2018, 08:29
                    #26

                    @Engelard said in How to remove incorrect warning?:

                    Or they put such types instead simple unsigned ints just for fun?

                    Well, no, they did it because that's how you return values in C (which is where the warning stems from as well). The header of the winapi is in C, and the clang parser expects C++ so it complains about things that are valid in C, but are bad style in C++. But as I said the warning is the least of your problems, fix your code.

                    Read and abide by the Qt Code of Conduct

                    1 Reply Last reply
                    2
                    • J JKSH
                      4 Dec 2018, 01:56

                      @Engelard said in How to remove incorrect warning?:

                      My solution with LPDWORD more correct simply because function GetExitCodeProcess demand LPDWORD.

                      It is correct to pass an LPDWORD parameter into GetExitCodeProcess().

                      It is wrong to use == or != to compare two LPDWORD variables because it is wrong to use == or != to compare pointers. Do you agree?

                      E Offline
                      E Offline
                      Engelard
                      wrote on 4 Dec 2018, 14:20 last edited by Engelard 12 Apr 2018, 15:01
                      #27

                      @JKSH said in How to remove incorrect warning?:

                      It is wrong to use == or != to compare two LPDWORD variables because it is wrong to use == or != to compare pointers. Do you agree?

                      Honestly, i don't know about comparing pointers, but it was in example to GetExitCodeProcess.

                      UPDATE:

                      Oh, now i get it. Was wrong example i found. So here is final code, do it better probably impossible:

                      0_1543934596938_gggggggggg.jpg

                      Tnx everyone for helping clarify those things.

                      J 1 Reply Last reply 5 Dec 2018, 02:40
                      0
                      • E Engelard
                        4 Dec 2018, 14:20

                        @JKSH said in How to remove incorrect warning?:

                        It is wrong to use == or != to compare two LPDWORD variables because it is wrong to use == or != to compare pointers. Do you agree?

                        Honestly, i don't know about comparing pointers, but it was in example to GetExitCodeProcess.

                        UPDATE:

                        Oh, now i get it. Was wrong example i found. So here is final code, do it better probably impossible:

                        0_1543934596938_gggggggggg.jpg

                        Tnx everyone for helping clarify those things.

                        J Offline
                        J Offline
                        JKSH
                        Moderators
                        wrote on 5 Dec 2018, 02:40 last edited by
                        #28

                        @Engelard said in How to remove incorrect warning?:

                        Oh, now i get it. Was wrong example i found. So here is final code

                        Good.

                        Do you understand the difference between the 2 sets of code that you posted?

                        Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                        E 1 Reply Last reply 5 Dec 2018, 13:46
                        0
                        • J JKSH
                          5 Dec 2018, 02:40

                          @Engelard said in How to remove incorrect warning?:

                          Oh, now i get it. Was wrong example i found. So here is final code

                          Good.

                          Do you understand the difference between the 2 sets of code that you posted?

                          E Offline
                          E Offline
                          Engelard
                          wrote on 5 Dec 2018, 13:46 last edited by
                          #29

                          @JKSH said in How to remove incorrect warning?:

                          Do you understand the difference between the 2 sets of code that you posted?

                          Of course, as i tell above - first time encountered situation with comparing pointers, never thought before, about is it possible or not.

                          1 Reply Last reply
                          0

                          27/29

                          4 Dec 2018, 14:20

                          • Login

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