我是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结构的正确方法是什么。任何帮助都会非常感谢。谢谢!
答案 0 :(得分:1)
int get_eeprom_vals(uchar);
签名错误..应该是:
int get_eeprom_vals(struct ddrautocal *cal);
因此前向声明和函数定义的签名匹配。
要访问这些成员,您需要:cal->wdtr
,cal->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
}