【嵌入式C】#define的陷阱

2020-03-26  本文已影响0人  Blue_Well
// 错误示例
#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下编译要注意。

上一篇下一篇

猜你喜欢

热点阅读