美文网首页
【嵌入式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的陷阱

    这里的问题主要出现在define中,在keil5下编译并没有报错,但是通过MCU运行出来的结果是不对的,而在Sub...

  • 阅读书单

    《嵌入式Linux应用开发完全手册》 《抛弃c程序设计中的谬误与恶习》 《c陷阱与缺陷》 《征服c指针》 《c专家...

  • 【嵌入式C】strcat的陷阱

    在嵌入式C中,可能会需要用到两个字符串合并起来的情况,比如声明两个字符串str1 = "abc"; str2 = ...

  • #define和const

    c语言只有#define,c++可以用#define和const来定义常量。const比#define更具优势。 ...

  • 2018-10-15 C语句

    1 #define 定义常量 语句加上分号 #define c 100 //不能有分号 #define...

  • 字体适配,这句代码就够了

    #define font(x) [UIFont systemFontOfSize:x] #define wsj_c...

  • 【嵌入式C】char变量的陷阱

    示例代码: 现象:从上面的代码中可以推测,程序想要的效果是当变量a--执行10次(9~0)之后就跳出while循环...

  • 第17章 高级数据表示

    #include #define TSIZE 45 #define FMAX 5 struct film{ c...

  • STC89C52RC单片机实现115200HZ波特率

    一、完整代码如下:C#include#define uchar unsigned char #define uin...

  • 嵌入式C语言入门

    嵌入式C语言和C语言在语法上没有任何区别,只是编译环境不同。 具体的区别大概在于嵌入式的C语言是在嵌入式开发板上运...

网友评论

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

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