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
- const 为形参的问题
- 编译是出现的不能将*const char转化为const char*时的问题
- 何时应将引用形参定义为 const 对象?如果在需要 const 引用时,将形参定 义为普通引用,则会出现什么问题?
- “QT中QString 转const char*为乱码或为空的问题 ”之解决方案
- const的一个问题
- 遇到的const问题
- 关于 const * 的问题
- 关于const的问题
- const 变量的问题
- const static 的问题
- const char*的问题
- string 类的const char *形参构造函数是否为explicit ?
- 复制构造函数:形参为const和nonconst的调用情形
- 关于operator const char *() const的问题
- const char*, char const*, char*const的区别问题
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- MFC遇到的一个字符集问题:不能将参数1从“const char []”转换为“LPCTSTR”
- (int agrc,const char* const* argv)为参数的函数
- javaweb工程中图片的显示
- C/C++程序员必须熟练应用的开源项目
- 一起学习Kotlin——Kotlin中的基本数据类型
- Android微信支付SDK
- centos7 常用命令
- const 为形参的问题
- Inno Setup入门(六)——在程序目录下创建文件夹
- MySQL数据库随机修改日期数据
- EChart
- I/O流(2)
- Oracle Dataguard 操作汇总
- centos虚拟机安装 初始 设置自动获取ip
- 在线流程设计器activti modeler整合 activiti modeler在线流程设计器自定义代理人、候选人选择
- 学习笔记:音频之耳机按键事件上报流程