코드 외부에 C 구조체가 정의되어 있습니다. 같은 구조의 팩 된 버전을 정의 할 수 있습니까? 내가 처음부터 내 자신의 구조를 정의하는 경우, 그것은 간단하다 C 구조체의 팩 버전 정의
struct test {
// members
} __attribute__((packed));
나는 단순한 구조를 정의하고 두 가지 가능성이 시도 :
struct test {
int x;
double y;
char z;
};
struct test_p {
struct test __attribute__((packed)) s;
};
이 :
struct test {
int x;
double y;
char z;
};
struct test_p {
struct test p;
} __attribute__((packed));
을 그러나, sizeof (struct test)와 같은 sizeof (struct test_p) = 24를 내 시스템에서 인쇄합니다 (64 비트 머신에서는 gcc 4.8.2를 사용합니다). 원하는 효과를 얻을 수있는 방법이 있습니까?
단지 궁금한 점이 있습니다. 네트워크를 통해받은 패킷을 구문 분석하고 싶습니다. 단지 포장 된 구조입니다. 것은 그것이 타사 라이브러리의 일부이기 때문에 헤더 파일을 수정할 수 없으며 구조체 자체에 하나씩 복사하기에 너무 많은 필드가 포함되어 있기 때문입니다. 확실히 구조 정의를 내 머리글에 복사하고 압축 된 버전을 만들 수 있습니다. 실제로는 지금 사용하고있는 솔루션입니다. 그러나 전체 정의를 복사하지 않는보다 간결한 솔루션이 있는지 궁금합니다. .
재미있는 질문이지만 우아한 해결책을 찾지 못할 것이라고 생각합니다. "이 속성은 열거 형, 구조체 또는 공용체를 정의하지 않는 typedef가 아니라 enum, struct 또는 union의 정의에만 지정할 수 있습니다." https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html – Dave