使用 memset 时出现“类型参数”警告
Posted
技术标签:
【中文标题】使用 memset 时出现“类型参数”警告【英文标题】:I'm having an `argument of type` warning while using memset 【发布时间】:2015-08-02 08:36:42 【问题描述】:我有数组;
volatile uint32_t SoftTimers[8] ;
我想在程序中将我的数组所有内容重置为零(不是初始化)。我搜索了这个并找到了memset
。但是我在使用这个功能时有这个警告(不是错误),这是一个问题吗?
我这样使用memset
:
memset(SoftTimers, 0, sizeof(SoftTimers));
这是警告信息:
警告:#167-D:“volatile uint32_t *”类型的参数与“void *”类型的参数不兼容
【问题讨论】:
【参考方案1】:在这种情况下你不能使用 memset,因为它需要一个非易失性指针,而你试图传递一个易失性指针:
6.7.3 类型限定符
如果尝试 通过使用左值来引用使用 volatile 限定类型定义的对象 对于非 volatile 限定类型,行为未定义。
编写你自己的函数,它接受一个指向volatile uint32_t
类型的指针。
【讨论】:
我明白了,有没有比 for 循环更快的方法来做这个操作? 我打算在中断处理程序中使用这个memset
函数。所以我不想在那里花太多时间。我试图提高效率
@abdullahcinar 首先确保代码正确。您可以稍后再担心速度。
当我使用 for 循环重置时这是正确的。我只是想花更少的时间。但你是对的,重要的是它的工作正常。感谢您的回复:)以上是关于使用 memset 时出现“类型参数”警告的主要内容,如果未能解决你的问题,请参考以下文章