c - sc_memset 中的 volatile 参数
问题描述
我正在编写的 C 程序的一部分包括使用 sc_memset() 函数初始化输入表。该表由 typedef 结构定义,如下所示。
typedef struct {
UINT32 switchnum;
UINT32 feedback[8];
UINT32 switch_output[8];
} SWITCH_CHECK_IN;
SWITCH_CHECK_IN switch_input_table;
所有表元素,即 switchnum、feedback 和 switch_output 都应初始化为零。用于初始化的 sc_memset 函数原型是:
extern void sc_memset (volatile unsigned char *dest, unsigned long n, unsigned char data);
我已经编写了初始化代码,并且由于 SWITCH_CHECK_IN 和 volatile unsigned char 中的类型差异,我尝试进行如下一些转换(我尝试了几个转换语句)但是每次我从不兼容的指针中得到一个'传递 sc_memeset 的 arg 1类型”错误。
while( *(volatile unsigned char *) &switch_input_table) {
{
sc_memset( &switch_input_table, sizeof(switch_input_table), 0 );
}
我是 C 的新手,所以我不太确定我的一般方法是否正确。1. 我哪里错了?你能告诉我正确的方法吗?2. 还有哪些方法可以使用?提前致谢。
解决方案
您需要将指向 struct 的指针转换为指向 unsigned char 的指针,就像您在while
条件中所做的那样:
sc_memset( (unsigned char*)&switch_input_table
, ...
您不需要volatile
在强制转换中 - 该函数隐式地将volatile
类型限定符添加到传递的参数中。为什么它有volatile
,我不知道——除非函数需要硬件寄存器等作为输入,否则它是可疑的代码。
推荐阅读
- python - PyAV:在重新混合流时强制新的帧速率?
- arrays - 在 Powershell 的新数组中仅存储 \\servername\share\
- c# - 使用 System.Text.Json.Serialization 解析 json 的异常
- python - Windows 似乎在 python str 中插入了额外的字节
- lua - How do you get the position of the side of a block so you can place a block perfectly next to the block
- c++ - c ++在函数中传递参数会出错
- oracle - 如何在 SuiteScript 2.0 中加密/解密字符串?
- python - 理解这段python代码到底能做什么?
- docker - Nginx 缓存 DNS 查找并忽略我的解析器设置
- python - Need help understanding classes in Python