使用 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 时出现“类型参数”警告的主要内容,如果未能解决你的问题,请参考以下文章

c中的memset struct数组时出现分段错误

在 STM32 上调用 memset 时出现硬故障异常

使用 SetIcon 时出现警告 C6387

使用字符串类型参数访问枚举时出现 TypeScript TS7015 错误

在 MATLAB 中使用回归函数时出现排名不足警告

在 PIG 中执行命令时出现警告