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. General Programming
  3. C / C++ / MFC
  4. Do you put :: in front of every Windows API call ?

Do you put :: in front of every Windows API call ?

Scheduled Pinned Locked Moved C / C++ / MFC
c++jsonquestion
15 Posts 5 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 Defenestration

    The problem with not putting the :: in front of Win API's when calling them is that you could introduce a subtle bug; the code would compile OK with you thinking your code was calling the Win API, but instead would actually be calling the member function by mistake.

    _ Offline
    _ Offline
    _AnsHUMAN_
    wrote on last edited by
    #6

    Defenestration wrote:

    with you thinking your code was calling the Win API

    no, a developer should take care which version should be called, the global one or the other one in the class and should use :: accordingly

    You need to google first, if you have "It's urgent please" mentioned in your question. ;-)_AnShUmAn_

    D 1 Reply Last reply
    0
    • _ _AnsHUMAN_

      Defenestration wrote:

      with you thinking your code was calling the Win API

      no, a developer should take care which version should be called, the global one or the other one in the class and should use :: accordingly

      You need to google first, if you have "It's urgent please" mentioned in your question. ;-)_AnShUmAn_

      D Offline
      D Offline
      Defenestration
      wrote on last edited by
      #7

      Thanks for helping me to think it through. In summary then: :: only needs to be placed in front of Win API functions when they are called from within class member functions, otherwise it's not necessary (ie. when calling a Win API function outside of a class).

      modified on Tuesday, December 9, 2008 2:41 AM

      R 1 Reply Last reply
      0
      • D Defenestration

        Thanks for helping me to think it through. In summary then: :: only needs to be placed in front of Win API functions when they are called from within class member functions, otherwise it's not necessary (ie. when calling a Win API function outside of a class).

        modified on Tuesday, December 9, 2008 2:41 AM

        R Offline
        R Offline
        Rajesh R Subramanian
        wrote on last edited by
        #8

        If you need to call the function declared in global namespace, then use the scope resolution operator, suffixing the API. If you don't do this, the local version of the API will be called. For example, when you write an MFC app, something like MessageBox is provided to you by both - the MFC application framework and is as well available in the global namespace. A call to MessageBox will end up calling the one provided by the application framework, whereas **::**MessageBox will call the one in the global namespace. There's nothing special to it, just used to specify the scope of the API being called.

        It is a crappy thing, but it's life -^ Carlo Pallini

        1 Reply Last reply
        0
        • D Defenestration

          When programming in C++, do you always put :: in front of every Windows API call to indicate it's in the global namespace, or you you think this makes the code ugly ?

          R Offline
          R Offline
          Roger Stoltz
          wrote on last edited by
          #9

          Defenestration wrote:

          When programming in C++, do you always put :: in front of every Windows API call

          Yes.

          "It's supposed to be hard, otherwise anybody could do it!" - selfquote
          "High speed never compensates for wrong direction!" - unknown

          D 1 Reply Last reply
          0
          • D Defenestration

            When programming in C++, do you always put :: in front of every Windows API call to indicate it's in the global namespace, or you you think this makes the code ugly ?

            S Offline
            S Offline
            Snorri Kristjansson
            wrote on last edited by
            #10

            Yes, but only on mondays

            1 Reply Last reply
            0
            • R Roger Stoltz

              Defenestration wrote:

              When programming in C++, do you always put :: in front of every Windows API call

              Yes.

              "It's supposed to be hard, otherwise anybody could do it!" - selfquote
              "High speed never compensates for wrong direction!" - unknown

              D Offline
              D Offline
              Defenestration
              wrote on last edited by
              #11

              How about C and C++ standard library function calls ?

              R 1 Reply Last reply
              0
              • D Defenestration

                How about C and C++ standard library function calls ?

                R Offline
                R Offline
                Roger Stoltz
                wrote on last edited by
                #12

                The scope resolution operator is C++ specific, thus you cannot use it in C.

                "It's supposed to be hard, otherwise anybody could do it!" - selfquote
                "High speed never compensates for wrong direction!" - unknown

                D 1 Reply Last reply
                0
                • R Roger Stoltz

                  The scope resolution operator is C++ specific, thus you cannot use it in C.

                  "It's supposed to be hard, otherwise anybody could do it!" - selfquote
                  "High speed never compensates for wrong direction!" - unknown

                  D Offline
                  D Offline
                  Defenestration
                  wrote on last edited by
                  #13

                  But you can call C library functions from C++ programs. So in this case, would you prefix C library function calls with :: ?

                  R 1 Reply Last reply
                  0
                  • D Defenestration

                    But you can call C library functions from C++ programs. So in this case, would you prefix C library function calls with :: ?

                    R Offline
                    R Offline
                    Roger Stoltz
                    wrote on last edited by
                    #14

                    Defenestration wrote:

                    So in this case, would you prefix C library function calls with :: ?

                    My point is you can't! Try prefixing a call to e.g. strlen() with the scope resolution operator. You'll get a compiler error.

                    "It's supposed to be hard, otherwise anybody could do it!" - selfquote
                    "High speed never compensates for wrong direction!" - unknown

                    D 1 Reply Last reply
                    0
                    • R Roger Stoltz

                      Defenestration wrote:

                      So in this case, would you prefix C library function calls with :: ?

                      My point is you can't! Try prefixing a call to e.g. strlen() with the scope resolution operator. You'll get a compiler error.

                      "It's supposed to be hard, otherwise anybody could do it!" - selfquote
                      "High speed never compensates for wrong direction!" - unknown

                      D Offline
                      D Offline
                      Defenestration
                      wrote on last edited by
                      #15

                      Roger Stoltz wrote:

                      My point is you can't! Try prefixing a call to e.g. strlen() with the scope resolution operator. You'll get a compiler error.

                      Not if the source filename extension is .cpp

                      modified on Tuesday, December 9, 2008 5:18 AM

                      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