定义函数并传递struct值

时间:2012-10-30 22:00:23

标签: c function struct declare

我是C的新手,我有几个关于将struct值转换为函数的问题以及声明函数的正确方法。

在我的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
}

我是一个完全的derp,我知道,但我正在努力变得更好。我一直试图让这一整天工作,并想知道我是否在common.h中正确地声明了该函数,以及在proc.c中我的get_eeprom_vals函数中访问ddrautocal结构的正确方法是什么。任何帮助都会非常感谢。谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

要访问这些成员,您需要:cal->wdtrcal->clkp(*cal).wdtr (*cal).clkp

- &GT;使用指针间接运算符。 *是间接运算符和句点的组合 - 点 - 访问字段。

我还认为您需要#include "common.h"而不是#include <common.h>,因为common.h不是系统标题。

答案 1 :(得分:0)

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

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
}