【问题标题】:define function and pass struct values定义函数并传递结构值
【发布时间】:2012-10-30 22:00:23
【问题描述】:

我是 C 新手,我有几个关于将结构值放入函数以及声明函数的正确方法的问题。

在我的 common.h 中我已经定义了

extern struct ddrautocal;
int get_eeprom_vals(uchar); // is this the correct declare the function?

在calibration.c中我定义了我的结构并更改了一些设置一些值(未显示)

#include <common.h>
struct ddrautocal {
    u32 wdtr;
    u32 clkp;
    u32 rdcc;
};

在 proc.c 中

#include <common.h>
int get_eeprom_vals(struct ddrautocal *cal){
// I'd like to access cal.wdtr and cal.clkp
}

我是个彻头彻尾的呆子,我知道,但我正在努力变得更好。我一整天都在努力让它工作,并想知道我是否在 common.h 中正确声明了该函数,以及在位于 proc.c 的 get_eeprom_vals 函数中访问 ddrautocal 结构的正确方法是什么任何帮助都会不胜感激。谢谢!

【问题讨论】:

    标签: c function struct declare


    【解决方案1】:

    int get_eeprom_vals(uchar);签名错误..应该是:

    int get_eeprom_vals(struct ddrautocal *cal); 所以前向声明和函数定义的签名匹配。

    要访问成员,您需要:cal-&gt;wdtrcal-&gt;clkp(*cal).wdtr (*cal).clkp

    -> 使用指针间接运算符。 * 是间接运算符和句点(点)的组合,用于访问字段。

    我还认为您需要 #include "common.h" 而不是 #include &lt;common.h&gt;,因为 common.h 不是系统标头。

    【讨论】:

    • 反应很好。我现在能够成功编译。在我的 proc.c 中,当访问像 cal->wdtr 这样的成员时,我收到“错误:取消引用指向不完整类型的指针”的编译错误。由于“extern struct ddrautocal;”,calibration.c 中所做的更改应该是全局性的; in common.h 正确吗?
    • 我认为你需要在proc.c中包含calibration.c。我很久没有用 C 语言做过了,但我相信这就是它抱怨的原因。找不到结构体的定义。
    【解决方案2】:

    首先要知道的是,我们必须确保函数的声明和它的定义相互匹配。在您的情况下,定义具有签名:

    int get_eeprom_vals(struct ddrautocal *cal)

    (函数的签名包括其名称和参数列表)。

    您需要将声明替换为:

    int get_eeprom_vals(struct ddrautocal *cal);
    

    另外,如果你想使用句点来取消引用结构的成员,你可以如下声明你的函数,然后你可以像你显示的那样引用它的成员

    int get_eeprom_vals(struct ddrautocal cal);
    {
         // you can use cal.wdtr etc
    }
    

    【讨论】:

    • 广春,谢谢,回复很简洁。当运行 int get_eeprom_vals(struct ddrautocal *cal); { printf("WRTR %x\n CLKP %x\n", cal.wdtr, cal.clkp); }
    • int get_eeprom_vals(struct ddrautocal *cal){ printf("WRTR %x\n CLKP %x\n", cal.wdtr, cal.clkp);给我一个错误:错误:在不是结构或联合的东西中请求成员'wdtr'错误:在不是结构或联合的东西中请求成员'clkp'这是否意味着我声明了我的extern struct ddrautocal;错了吗?
    猜你喜欢
    • 2018-03-22
    • 2019-08-30
    • 2018-04-16
    • 2021-09-04
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    相关资源
    最近更新 更多