百度strict alias,规则不难理解,记不住也没关系,遇到这种情况一概不要挑战编译器 要么volatile避免一切优化,要么多敲两行字 该用union用union,要么用uint8_t按字节访问也不会有问题,要么老老实实memcpy/memcmp
就这个例子解释strict alias的原则,如果两个形参都是long *,那它们是有可能指向同一个对象的,编译器不会做过度推测这两个对象不相等,因此不会出现歧义。但如果像你写的两个形参一个short*一个long*,根据原则这两个不兼容的引用不应当指向同一个内存对象,因此编译器可以做合理推测进行优化
例外是uint8_t char uchar这几个单字节类型的指针,允许与其他任意类型做alias,方便直接内存操作
【 在 stub 的大作中提到: 】
: 你如果short改成long就不是未定义
--
修改:eggcar FROM 111.198.57.*
FROM 111.198.57.*