#include <stddef.h>
#define C_ASSERT(expr) extern char CAssertExtern[(expr)?1:-1]
// You keep this definition private to module A (e.g. in a .c file):
typedef struct
{
int A;
int B;
int C[4];
} PrivateStruct;
// You expose this definition to all modules (in an .h file):
typedef struct
{
char reserved[2*sizeof(int)];
int C[4];
} PublicStruct;
// You put these in module A (in a .c file):
C_ASSERT(sizeof(PrivateStruct) == sizeof(PublicStruct));
int main(void)
{
return 0;
}
I2luY2x1ZGUgPHN0ZGRlZi5oPgoKI2RlZmluZSBDX0FTU0VSVChleHByKSBleHRlcm4gY2hhciBDQXNzZXJ0RXh0ZXJuWyhleHByKT8xOi0xXQoKLy8gWW91IGtlZXAgdGhpcyBkZWZpbml0aW9uIHByaXZhdGUgdG8gbW9kdWxlIEEgKGUuZy4gaW4gYSAuYyBmaWxlKToKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IEE7CiAgICBpbnQgQjsKICAgIGludCBDWzRdOwp9IFByaXZhdGVTdHJ1Y3Q7CgovLyBZb3UgZXhwb3NlIHRoaXMgZGVmaW5pdGlvbiB0byBhbGwgbW9kdWxlcyAoaW4gYW4gLmggZmlsZSk6CnR5cGVkZWYgc3RydWN0CnsKICAgIGNoYXIgcmVzZXJ2ZWRbMipzaXplb2YoaW50KV07CiAgICBpbnQgQ1s0XTsKfSBQdWJsaWNTdHJ1Y3Q7CgovLyBZb3UgcHV0IHRoZXNlIGluIG1vZHVsZSBBIChpbiBhIC5jIGZpbGUpOgpDX0FTU0VSVChzaXplb2YoUHJpdmF0ZVN0cnVjdCkgPT0gc2l6ZW9mKFB1YmxpY1N0cnVjdCkpOwpDX0FTU0VSVChvZmZzZXRvZihQcml2YXRlU3RydWN0LEMpID09IG9mZnNldG9mKFB1YmxpY1N0cnVjdCxDKSk7CgppbnQgbWFpbih2b2lkKQp7CiAgcmV0dXJuIDA7Cn0K