在某个特定的情况下,你的代码中的 int8_t/int16_t/int32_t/int64_t/uint8_t/uint16_t/uint32_t/uint64_t 都会变成 32 位的。比如你定义了一个结构体 struct MessageHeader{ int64_t messageId; int32_t messageType; };
结果,在同一个程序中,它一会儿是 12 个字节,一会儿是 8 字节。这样的奇妙问题足够让你 debug 很久……
问题出在 glibc 的 argp 这个烂玩意儿上: https://bugzilla.redhat.com/show_bug.cgi?id=1366830