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. What does #pragma pack(0) do

What does #pragma pack(0) do

Scheduled Pinned Locked Moved C / C++ / MFC
question
21 Posts 7 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.
  • L Lost User

    5

    ============================== Nothing to say.

    L Offline
    L Offline
    Lakamraju Raghuram
    wrote on last edited by
    #10

    I am reading 8 on my console.

    L 1 Reply Last reply
    0
    • Y yu jian

      The msdn says #pragma pack(n) will change current alignment value to n. But if n is zero, what will do?

      C Offline
      C Offline
      CPallini
      wrote on last edited by
      #11

      Why don't you continue reading MSDN? #pragma pack documentation[^] states:

      Valid values are 1, 2, 4, 8, and 16.

      Hence 0 is 'not valid' (I wouldn't try to make assumptions on a value marked as such).

      Veni, vidi, vici.

      Y 1 Reply Last reply
      0
      • Y yu jian

        The msdn says #pragma pack(n) will change current alignment value to n. But if n is zero, what will do?

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #12

        yu-jian wrote:

        But if n is zero, what will do?

        Add /WX to your compiler settings and recompile. You should pay more attention to compiler warnings. :) Best Wishes, -David Delaune

        Y 1 Reply Last reply
        0
        • L Lakamraju Raghuram

          #pragma pack(0)

          #include
          using namespace std;

          struct Test
          {
          char a;
          int i;
          };

          void main()
          {
          cout<

          I am using VS2008 SP1. The build is x86.
          Now guess the result of sizeof(Test) ??

          Y Offline
          Y Offline
          yu jian
          wrote on last edited by
          #13

          8 in vs2008 sp1

          1 Reply Last reply
          0
          • C CPallini

            Why don't you continue reading MSDN? #pragma pack documentation[^] states:

            Valid values are 1, 2, 4, 8, and 16.

            Hence 0 is 'not valid' (I wouldn't try to make assumptions on a value marked as such).

            Veni, vidi, vici.

            Y Offline
            Y Offline
            yu jian
            wrote on last edited by
            #14

            Just after read MSDN, I found that the case n=0 is ignored. I do not know why.

            enhzflepE 1 Reply Last reply
            0
            • Y yu jian

              Just after read MSDN, I found that the case n=0 is ignored. I do not know why.

              enhzflepE Offline
              enhzflepE Offline
              enhzflep
              wrote on last edited by
              #15

              Simply because it's not explicitly handled. Without giving the directive a special meaning for n=0, it makes perfect sense - it keeps the use of the directive consistent.

              1 Reply Last reply
              0
              • L Lost User

                yu-jian wrote:

                But if n is zero, what will do?

                Add /WX to your compiler settings and recompile. You should pay more attention to compiler warnings. :) Best Wishes, -David Delaune

                Y Offline
                Y Offline
                yu jian
                wrote on last edited by
                #16

                There is a error that Visual Studio 2008 only supports 1, 2, 4, 8... After add /WX to compiter.

                L 1 Reply Last reply
                0
                • Y yu jian

                  There is a error that Visual Studio 2008 only supports 1, 2, 4, 8... After add /WX to compiter.

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #17

                  See the documentation[^], which clearly states that the only valid values for n are 1, 2, 4, 8 and 16. Thus using 0 is an invalid #pragma and will be ignored: the default packing (8) will be used.

                  Binding 100,000 items to a list box can be just silly regardless of what pattern you are following. Jeremy Likness

                  Y 1 Reply Last reply
                  0
                  • C Chris Losinger

                    Erudite_Eric wrote:

                    pragma pack 0 means there is no packing between data members, so they are contiguous in memory.

                    no. that's pack(1) : align on single bytes. pack(n) specifies the structure alignment, not the number of bytes between structs.

                    image processing toolkits | batch image processing

                    L Offline
                    L Offline
                    Lost User
                    wrote on last edited by
                    #18

                    Doh! Quite correct. :doh:

                    ============================== Nothing to say.

                    1 Reply Last reply
                    0
                    • L Lakamraju Raghuram

                      I am reading 8 on my console.

                      L Offline
                      L Offline
                      Lost User
                      wrote on last edited by
                      #19

                      Yeah, it is 8, DWORD alignment. I got it wrong... :(

                      ============================== Nothing to say.

                      1 Reply Last reply
                      0
                      • L Lost User

                        See the documentation[^], which clearly states that the only valid values for n are 1, 2, 4, 8 and 16. Thus using 0 is an invalid #pragma and will be ignored: the default packing (8) will be used.

                        Binding 100,000 items to a list box can be just silly regardless of what pattern you are following. Jeremy Likness

                        Y Offline
                        Y Offline
                        yu jian
                        wrote on last edited by
                        #20

                        Thank you for everyone's replies.

                        1 Reply Last reply
                        0
                        • Y yu jian

                          The msdn says #pragma pack(n) will change current alignment value to n. But if n is zero, what will do?

                          A Offline
                          A Offline
                          Aescleal
                          wrote on last edited by
                          #21

                          According to the C++ standard it can do whatever it likes. It's a way of implementors switching on non-standard features of the compiler. I think Griff and the others have told you enough about what it does on VC++ though! Cheers, Ash PS: Except this is the one thread Griff hasn't posted in. Let's try "Chris and the others..." instead!

                          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