带有引用的函数未编译

时间:2019-04-21 20:35:18

标签: c

我有这个简单的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];

有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

此(volatile Modulation_format_cnfg& r)至少是问题之一。在c中,您必须按地址传递(而不是像在c ++中那样直接通过引用传递)。为此,可以将该行更改为volatile Modulation_format_cnfg* r,向其传递一个指针(&someStackVarmalloc堆内存),然后在函数中使用箭头运算符。