1. 程式人生 > >const 為形參的問題

const 為形參的問題

問答原貼連線: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,這樣自己犯錯的概率會小一點(相信調過程式的人都是堅信人一定會犯錯的,所以儘管有些微不足道的東西,也應該養成個好習慣),也比較規範。