我正在一个项目中工作,我们有很多内存作为#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;
通过这种方式.
这是一个盲目的镜头,因为你没有提供使用它的代码#define
,但是你违反了关于#define
s中常量的基本最佳实践之一.
由于#define
s被用作盲文替换,如果不用括号括起计算,则可能会混淆使用define的代码表达式.考虑
#define SEVEN 5+2
然后有人用它作为
printf("thirty-five: %d", SEVEN*5);
这将实际打印15,因为它将被替换为:
printf("thirty-five: %d", 5+2*5);
因此,为避免出现问题,请始终用括号括起常量定义.为什么最后一个似乎工作在我身后,也许你真的没有用它重新编译?