2020-01-13 18:25发布
//指针 uint8_t test_tab[4]; uint8_t test_var; uint8_t *p; p = &test_tab[0]; *p = 0xFF; (*p) >>= 1;//执行该条指令之后,test_tab[0]仍是0xFF。 //直接操作 test_var = 0xFF; test_var >>= 1;//执行该条指令之后,test_var是0x7F,高位补"0"。
2019-04-02_170333.png (2.68 KB, 下载次数: 0)
下载附件
2019-4-2 17:04 上传
最多设置5个标签!
不知是什么编译器,我看是 51 分论坛的,就用 KEIL C51 v8.12 试了试,没发现 LZ 说的问题。
2019-04-02_170333.png (2.68 KB, 下载次数: 0)
下载附件
2019-4-2 17:04 上传
不过 KEIL 优化很厉害的,如果程序最后一行是对某非 volatile 变量赋值,直接无视。
---------------------------------------------------------------------------------------------------------------------------------------
编辑原因:补充内容。
我又测试了 ICCAVR 编译器,一样没有出现 LZ 的问题,但是有一点需要注意:uint8_t 的定义不是标准 C。
所有测试都要加 typedef 这个定义(例如7楼)。但如果你定义错了,或者有疯狂的宏在作祟,就会有很作死的效果,例如:
typedef signed char uint8_t;
一周热门 更多>