【发布时间】:2021-01-20 16:45:22
【问题描述】:
我在 xc32 编译器(基于 gcc 的微控制器编译器,不是开源的)上收到这样的警告。
modem_uart.c:66:5:警告:传递 'memset' 丢弃的参数 1 来自指针目标类型的 'volatile' 限定符 [默认启用]
代码如下:
#include <string.h>
// (...)
volatile char rxbuf[MODEM_UART_RXBUF_SIZE];
// (...)
void some_function(void)
{
// (...)
memset(rxbuf, 0, MODEM_UART_RXBUF_SIZE); // <- warning here
// (...)
}
有人能解释一下为什么编译器会丢弃 volatile 吗?
【问题讨论】:
-
因为
memset()的声明在第一个参数上没有volatile。 -
库函数没有丢弃
volatile,此代码尝试通过调用丢弃volatile,编译器会明智地发出警告。 -
@FredLarson 是的,实际上这与我正在做的非常相似。感谢您提供的链接也解释了我的其他顾虑。