최근에 비교적 큰 프로젝트에서 여러 헤더가 서로 다른 순서로 다른 cpp 파일에 포함되어 있기 때문에 추한 런타임 충돌이 발생했습니다.모듈 간 컴파일 시간 * assertions */c,
이 헤더에는 #pragma pack이 포함되어 있습니다.이 pragma는 때로는 '닫혀 있지 않습니다'(컴파일러의 기본 #pragma pack()으로 다시 설정 됨)되어 다른 객체 파일의 객체 레이아웃이 달라집니다. 하나의 모듈에서 생성되고 다른 모듈로 전달되는 구조체 멤버에 액세스 할 때 응용 프로그램이 충돌하는 것은 놀라운 일이 아닙니다. 또는 기본 클래스에서 멤버에 액세스하는 파생 클래스입니다.
나는 모든 버그로부터 좀 더 일반적인 디버깅 및 단정 전략을 만드는 아이디어를 좋아하기 때문에 항상 객체 레이아웃이 항상 동일하고 어디 에나 동일하다는 것을 주장하고 싶습니다.
그래서
ASSERT (을 offsetof (membervar) == 4)
을 주장하기 쉬울 것이다 그러나 이것은 또 다른 모듈에서 다른 레이아웃을 잡을 것 - 또는 수동 업데이트를 할 때마다 구조체 레이아웃 변경 필요 .. 그래서 내 마음에 드는 생각은 (membervar (을 offsetof) ==을 offsetof (othermodule_membervar))
ASSERT 같은 것
이 주장과 함께 할 수 있을까요? 아니면 단위 테스트의 경우입니까?
감사합니다, H
참조 pragma push/pop. –