【问题标题】:I'm having an `argument of type` warning while using memset使用 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 *”类型的参数不兼容

【问题讨论】:

    标签: c arrays memset


    【解决方案1】:

    在这种情况下你不能使用 memset,因为它需要一个非易失性指针,而你试图传递一个易失性指针:

    6.7.3 类型限定符

    1. 如果尝试 通过使用左值来引用使用 volatile 限定类型定义的对象 对于非 volatile 限定类型,行为未定义。

    编写你自己的函数,它接受一个指向volatile uint32_t 类型的指针。

    【讨论】:

    • 我明白了,有没有比 for 循环更快的方法来做这个操作?
    • 我打算在中断处理程序中使用这个memset 函数。所以我不想在那里花太多时间。我试图提高效率
    • @abdullahcinar 首先确保代码正确。您可以稍后再担心速度。
    • 当我使用 for 循环重置时这是正确的。我只是想花更少的时间。但你是对的,重要的是它的工作正常。感谢您的回复:)