当前位置:  开发笔记 > 编程语言 > 正文

使用#defines时,我得到的结果不同

如何解决《使用#defines时,我得到的结果不同》经验,为你挑选了1个好方法。

我正在一个项目中工作,我们有很多内存作为#defines,如

#define SRAM1      0xb0000000+((1024*1024)-64)   //1

如果我使用上面的#define我会收到错误如果我将其更改为

#define SRAM1     (0xb0000000+((1024*1024)-64))  //2

有用.即便如此

#define SRAM1      0xb0000000+((1048576)-64)     //3

是否存在关联性的问题或指针中的乘法以这种方式不允许?我们工作中的PS用法是

         if((*(OSLongType *)(SRAM1)) == 1)

要么

         *(OSLongType *)(SRAM1)= 0;

通过这种方式.



1> Matteo Itali..:

这是一个盲目的镜头,因为你没有提供使用它的代码#define,但是你违反了关于#defines中常量的基本最佳实践之一.

由于#defines被用作盲文替换,如果不用括号括起计算,则可能会混淆使用define的代码表达式.考虑

#define SEVEN 5+2

然后有人用它作为

printf("thirty-five: %d", SEVEN*5);

这将实际打印15,因为它将被替换为:

printf("thirty-five: %d", 5+2*5);

因此,为避免出现问题,请始终用括号括起常量定义.为什么最后一个似乎工作在我身后,也许你真的没有用它重新编译?

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有