所以在我的代码中,我在头文件中定义了以下结构:
测试.h:
#ifndef TEST
#define TEST
typedef struct struct1 {
uint8_t a;
uint16_t b;
uint16_t c;
} struct1;
typedef struct struct2 {
uint8_t a;
uint8_t b;
uint8_t c;
uint8_t d;
uint8_t e;
struct struct1 f;
} struct2;
void doStuff(struct struct2 * s);
#endif
当我声明一个 struct2 并使用指向它的指针调用一个函数时,在函数内部分配的值与在该函数外部读取的值不匹配
主.c:
#include <stdint.h>
#include <stdio.h>
#include "test2.h"
#include "test.h"
int main(){
struct struct2 s;
s.a=0;s.b=0;s.c=0;s.e=0;
printf("Main's s's size: %d\n", sizeof(s));
doStuff(&s);
}
测试.c:
#include <stdint.h>
#include <stdio.h>
#include "test.h"
void doStuff(struct struct2 * s){
printf("doStuff's size: %d\n", sizeof(*s));
}
测试2.h:
#pragma pack(1)
打印它们的大小时,doStuff 内部的 sizeof(*s) 返回 12,而在主函数 sizeof(s) 内部返回 10。当比较每个内部值的地址时,sa 到 se 匹配函数内部和外部,sf 和sfa一关,sfb和sfc二关。
知道这里发生了什么吗?
(注意:问题已被关闭,因为我不认为它是重复的。真正的问题源于 test2.h 使用 '#pragma pack(1)'。移动 test2.h 的#include在 test.h 之后使其按预期工作。要在 GCC 4.4 下运行上面的“gcc -o test test.c main.c”)