我有这个简单的C代码,但是在写和读函数中包含参考变量输入参数使程序无法编译。如果我删除&,该程序就可以了。我正在Microsoft Visual Studio 2017上运行它。
#include <stdio.h>
#include <stdint.h>
typedef struct Cr Cr;
typedef struct Modulation_format_cnfg Modulation_format_cnfg;
struct Modulation_format_cnfg {
union {
struct
{
uint32_t sc0 : 3;
uint32_t : 5;
uint32_t sc1 : 3;
uint32_t : 5;
uint32_t sc2 : 3;
uint32_t : 5;
uint32_t sc3 : 3;
uint32_t : 5;
};
uint32_t raw;
};
};
struct Cr
{
uint32_t const kBlock_base_addr;
Modulation_format_cnfg volatile modulation_format_cnfg;
};
void write(volatile Modulation_format_cnfg& r, const int val) {
r.raw = val;
}
uint32_t read(Modulation_format_cnfg volatile& r, const int val) {
return r.raw;
}
Cr cr[2];
有人可以帮忙吗?
谢谢!
答案 0 :(得分:3)
此(volatile Modulation_format_cnfg& r
)至少是问题之一。在c中,您必须按地址传递(而不是像在c ++中那样直接通过引用传递)。为此,可以将该行更改为volatile Modulation_format_cnfg* r
,向其传递一个指针(&someStackVar
或malloc
堆内存),然后在函数中使用箭头运算符。