neutronlmk 发表于 2019-8-21 16:47:30

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

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

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

增加一个:
void FT25Hxx_ReadRDID(uint8_t *fu8p_SaveArr)
{
    uint8_t u8_i;
   
    FT25Hxx_CS = 0;                                 //使能器件
    SPI_WriteReadData(0x9F);                        //发送读取RDID命令
    SPI_WriteReadData(0x00);                        //发送24bit地址
    SPI_WriteReadData(0x00);
    SPI_WriteReadData(0x00);
    for(u8_i=0;u8_i<3;u8_i++)
    {
      fu8p_SaveArr=SPI_WriteReadData(0xFF); //循环读数
    }
    FT25Hxx_CS = 1;                                 //取消片选
}
fu8p_SaveArr是否有必要声明为 uint8_t *const fu8p_SaveArr ?
我试过编译OK。


lcw_swust 发表于 2019-8-21 17:00:46

const 改为code 试试

jathenal 发表于 2019-8-21 17:15:47

const不仅在语义上提醒不要修改,更是从编译器级别保证不会被误修改;
以lz位代码为例,如果函数代码中不小心修改了fu32_Address的值,前者会在编译时立刻报错发现,后者则会在运行时得到错误的结果(擦除错误的扇区、而且也许不会立即被发现)。

nanfang2000 发表于 2019-8-21 17:21:54

这不很正常嘛,const主要就是给编译器检查用的,你没违背const的限制,就不会报错而已,生成的代码当然是一样的。内存和CPU又不管只读不只读的

xf331785508 发表于 2019-8-21 17:31:39

好奇,测了一下,好像真没区别。

neutronlmk 发表于 2019-8-21 19:57:12

jathenal 发表于 2019-8-21 17:15
const不仅在语义上提醒不要修改,更是从编译器级别保证不会被误修改;
以lz位代码为例,如果函数代码中不小 ...

感谢感谢

hmsfeng 发表于 2019-8-21 20:46:32

const代表在本函数范围内值是不能修改的

tuy0326 发表于 2019-8-22 08:34:29

哈哈,真逗

Jmhh247 发表于 2019-8-22 08:38:21

你好,金牌会员。。。这能说明系统性的看完一本C语言书的必要性吗
页: [1]
查看完整版本: 常量、变量做函数参数,在变量不变情况下感觉没区别。