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