sc_memset 中的可变参数
volatile argument in sc_memset
我正在编写的 C 程序的一部分包括使用 sc_memset() 函数初始化输入 table。 table 由 typedef 结构定义,如下所示。
typedef struct {
UINT32 switchnum;
UINT32 feedback[8];
UINT32 switch_output[8];
} SWITCH_CHECK_IN;
SWITCH_CHECK_IN switch_input_table;
所有 table 元素,即 switchnum、feedback 和 switch_output 应初始化为 zero.The sc_memset 用于初始化的函数原型是:
extern void sc_memset (volatile unsigned char *dest, unsigned long n, unsigned char data);
我已经编写了初始化代码,并且由于 SWITCH_CHECK_IN 和 volatile unsigned char 中的类型差异,我尝试如下进行一些转换(我尝试了几个转换语句)但是每次我得到'passing arg 1 of sc_memeset from incompatible pointer type' 错误。
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
,我不知道 - 这是可疑的代码,除非函数需要硬件寄存器等作为输入。
我正在编写的 C 程序的一部分包括使用 sc_memset() 函数初始化输入 table。 table 由 typedef 结构定义,如下所示。
typedef struct {
UINT32 switchnum;
UINT32 feedback[8];
UINT32 switch_output[8];
} SWITCH_CHECK_IN;
SWITCH_CHECK_IN switch_input_table;
所有 table 元素,即 switchnum、feedback 和 switch_output 应初始化为 zero.The sc_memset 用于初始化的函数原型是:
extern void sc_memset (volatile unsigned char *dest, unsigned long n, unsigned char data);
我已经编写了初始化代码,并且由于 SWITCH_CHECK_IN 和 volatile unsigned char 中的类型差异,我尝试如下进行一些转换(我尝试了几个转换语句)但是每次我得到'passing arg 1 of sc_memeset from incompatible pointer type' 错误。
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
,我不知道 - 这是可疑的代码,除非函数需要硬件寄存器等作为输入。