0

私は C が初めてで、構造体の値を関数に取得することと、関数を宣言する正しい方法についていくつか質問がありました。

私のcommon.hで定義しました

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

キャリブレーション.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 構造体にアクセスする正しい方法は何かを知りたいです。高く評価されます。ありがとう!

4

2 に答える 2

1

int get_eeprom_vals(uchar);署名が間違っています..次のようにする必要があります。

int get_eeprom_vals(struct ddrautocal *cal);したがって、前方宣言と関数定義の署名は一致します。

メンバーにアクセスするには、次が必要です: cal->wdtrcal->clkpまたは(*cal).wdtr (*cal).clkp

-> ポインター間接演算子を使用します。* は、フィールドにアクセスするための間接演算子とピリオド (ドット) の組み合わせです。

また、common.h はシステム ヘッダーではないため、#include "common.h"代わりに必要だと思います。#include <common.h>

于 2012-10-30T22:06:03.650 に答える
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
}
于 2012-10-30T22:28:50.237 に答える