const 为形参的问题

来源:互联网 发布:淘宝助手在哪 编辑:程序博客网 时间:2024/05/16 09:46

问答原贴连接:http://www.openedv.com/posts/list/7105.htm

最近在移植FATFS到STM32上出现了一个问题:


DRESULT disk_write (
        BYTE drv,                        /* Physical drive nmuber (0..) */
        const BYTE *buff,        /* Data to be written */
        DWORD sector,                /* Sector address (LBA) */
        BYTE count                        /* Number of sectors to write (1..255) */
)
{
//  DRESULT res;
        u8 result;
        switch (drv) {

        case MMC :
        {
                              result = SD_WriteDisk((u8*)buff, sector, count);
                // translate the reslut code here
            }

}
        return RES_PARERR;

SD_WriteDisk的原型   u8 SD_WriteDisk(u8*buf,u32 sector,u8 cnt);
请教下大家一个问题,为什么const BYTE *buff作为形参,SD_WriteDisk传进来的实参一定要是加(u8*)强制转换的呢(即(u8*)buff ),
不然编译不过提示    argument of type "const BYTE *" is incompatible with parameter of type "u8 *"

实在是不明白,请指教,谢谢!



编译器不允许你把常量当变量使用, 
这样会导致安全性问题, 

比如, SD_WriteDisk 函数内部可能会对 buf 指向的缓冲区进行写操作,但是如果 buf 是指向 code 区的常量,系统可能就会崩溃 

如果 SD_WriteDisk 不对 buf 进行写入,函数又没定义成  SD_WriteDisk(u8 const* , ...),只能说这个函数定义的不够规范,自己改一下定义就行了。一般不进行写入的量,都应该定义成 const,这样自己犯错的概率会小一点(相信调过程序的人都是坚信人一定会犯错的,所以尽管有些微不足道的东西,也应该养成个好习惯),也比较规范。 

阅读全文
0 0