#pragma pack effect

后端 未结 11 1694
生来不讨喜
生来不讨喜 2020-11-22 03:19

I was wondering if someone could explain to me what the #pragma pack preprocessor statement does, and more importantly, why one would want to use it.

I

11条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-22 03:57

    Note that there are other ways of achieving data consistency that #pragma pack offers (for instance some people use #pragma pack(1) for structures that should be sent across the network). For instance, see the following code and its subsequent output:

    #include 
    
    struct a {
        char one;
        char two[2];
        char eight[8];
        char four[4];
    };
    
    struct b { 
        char one;
        short two;
        long int eight;
        int four;
    };
    
    int main(int argc, char** argv) {
        struct a twoa[2] = {}; 
        struct b twob[2] = {}; 
        printf("sizeof(struct a): %i, sizeof(struct b): %i\n", sizeof(struct a), sizeof(struct b));
        printf("sizeof(twoa): %i, sizeof(twob): %i\n", sizeof(twoa), sizeof(twob));
    }
    

    The output is as follows: sizeof(struct a): 15, sizeof(struct b): 24 sizeof(twoa): 30, sizeof(twob): 48

    Notice how the size of struct a is exactly what the byte count is, but struct b has padding added (see this for details on the padding). By doing this as opposed to the #pragma pack you can have control of converting the "wire format" into the appropriate types. For instance, "char two[2]" into a "short int" et cetera.

提交回复
热议问题