美文网首页
【嵌入式C】#define的陷阱

【嵌入式C】#define的陷阱

作者: Blue_Well | 来源:发表于2020-03-26 09:21 被阅读0次
    // 错误示例
    #include <stdio.h>
    
    typedef unsigned char uint8_t;
    typedef unsigned short int uint16_t;
    typedef unsigned int uint32_t;
    
    #define MAX_DATA_BUFFER_SIZE    10*240*2
    
    int main(int argc, char const *argv[])
    {
     uint16_t full_read_num = 0;
    
     full_read_num = 115200/MAX_DATA_BUFFER_SIZE;
     printf("full_read_num = %d,\r\n", full_read_num);
     return 0;
    }
    

    这里的问题主要出现在define中,在keil5下编译并没有报错,但是通过MCU运行出来的结果是不对的,而在Sublime Text下编译会报错,原因是define中的运算没有加括号。因为define是替换,并不会做运算,115200/MAX_DATA_BUFFER_SIZE就会变成115200÷10×240×2 = 5,529,600 而实际上我们需要的结果是115200÷4800 = 24结果完全不同,因此我keil下编译要注意。

    相关文章

      网友评论

          本文标题:【嵌入式C】#define的陷阱

          本文链接:https://www.haomeiwen.com/subject/rydquhtx.html