常量、变量做函数参数,在变量不变情况下感觉没区别。

2020-01-12 17:23发布

本帖最后由 neutronlmk 于 2019-8-21 20:17 编辑

常量做参数
  1. void FT25Hxx_EraseSector(const uint32_t fu32_Address)
  2. {
  3.     FT25Hxx_WriteEnable();                          //FT25Hxx写使能
  4.     FT25Hxx_CS = 0;                                 //使能器件
  5.     SPI_WriteReadData(0x20);
  6.     SPI_WriteReadData((uint8_t)(fu32_Address>>16)); //发送地址
  7.     SPI_WriteReadData((uint8_t)(fu32_Address>>8));
  8.     SPI_WriteReadData((uint8_t)(fu32_Address));
  9.     FT25Hxx_CS = 1;                                 //取消片选
  10.     FT25Hxx_WaitBusy();                             //等待写入结束
  11. }
复制代码变量做参数:
  1. void FT25Hxx_EraseSector(uint32_t fu32_Address)
  2. {
  3.     FT25Hxx_WriteEnable();                          //FT25Hxx写使能
  4.     FT25Hxx_CS = 0;                                 //使能器件
  5.     SPI_WriteReadData(0x20);
  6.     SPI_WriteReadData((uint8_t)(fu32_Address>>16)); //发送地址
  7.     SPI_WriteReadData((uint8_t)(fu32_Address>>8));
  8.     SPI_WriteReadData((uint8_t)(fu32_Address));
  9.     FT25Hxx_CS = 1;                                 //取消片选
  10.     FT25Hxx_WaitBusy();                             //等待写入结束
  11. }
复制代码编译输出大小不变,使用的ram也不变。
这该如何决择?

增加一个:
  1. void FT25Hxx_ReadRDID(uint8_t *fu8p_SaveArr)
  2. {
  3.     uint8_t u8_i;
  4.    
  5.     FT25Hxx_CS = 0;                                 //使能器件
  6.     SPI_WriteReadData(0x9F);                        //发送读取RDID命令
  7.     SPI_WriteReadData(0x00);                        //发送24bit地址  
  8.     SPI_WriteReadData(0x00);
  9.     SPI_WriteReadData(0x00);
  10.     for(u8_i=0;u8_i<3;u8_i++)
  11.     {
  12.         fu8p_SaveArr[u8_i]=SPI_WriteReadData(0xFF); //循环读数
  13.     }
  14.     FT25Hxx_CS = 1;                                 //取消片选
  15. }
复制代码
fu8p_SaveArr是否有必要声明为 uint8_t *const fu8p_SaveArr ?
我试过编译OK。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
lcw_swust
1楼-- · 2020-01-12 22:39
 精彩回答 2  元偷偷看……
jathenal
2楼-- · 2020-01-13 02:28
const不仅在语义上提醒不要修改,更是从编译器级别保证不会被误修改;
以lz位代码为例,如果函数代码中不小心修改了fu32_Address的值,前者会在编译时立刻报错发现,后者则会在运行时得到错误的结果(擦除错误的扇区、而且也许不会立即被发现)。
nanfang2000
3楼-- · 2020-01-13 07:08
这不很正常嘛,const主要就是给编译器检查用的,你没违背const的限制,就不会报错而已,生成的代码当然是一样的。内存和CPU又不管只读不只读的
xf331785508
4楼-- · 2020-01-13 08:03
好奇,测了一下,好像真没区别。
neutronlmk
5楼-- · 2020-01-13 11:18
jathenal 发表于 2019-8-21 17:15
const不仅在语义上提醒不要修改,更是从编译器级别保证不会被误修改;
以lz位代码为例,如果函数代码中不小 ...

感谢感谢
hmsfeng
6楼-- · 2020-01-13 12:28
 精彩回答 2  元偷偷看……

一周热门 更多>