1

これはかなり基本的な質問かもしれませんが、私は C の初心者なので、ご容赦ください。

私はこれに出くわしたCで書かれたファームウェアのいくつかのドキュメントを調べています:

typedef struct {
                 int x;
                 int arr[10];
               } sx;

次に、その型へのポインターが渡される関数があります。

int f(sx xtype *sp, int i){
                            return sp -> arr[i];
                          }

私のJavaの経験から、最初のスニペットはJavaのオブジェクトクラスによく似たスーパークラスと同等であり、2番目のスニペットはsxのサブクラスを使用していると思います。しかし、よくわかりません。誰でも確認できますか?これまでの私の小さな C の経験から、型へのポインターを渡すためのより理解しやすい方法は次のようになると思います。

typedef struct xtype {
                 int x;
                 int arr[10];
                 } sx;

int f(sx *sp, int i){
                     return sp -> arr[i];
                    }

しかし、私はこの写真から何かが欠けているのではないかと疑っています. 前もって感謝します!

4

1 に答える 1

6

これは珍しい構文です。それxtypeはどこかで定義されたマクロであり、次のようになる可能性があると思います

#define xtype const

いずれにせよ、変数の宣言は、それがサブタイプを参照しているとは言ってsx xtype *spないか、これは私が長い間見てきた中で最悪のプリプロセッサ マジックです。spxtypesx


2番目の例については、これもサブクラス化をモデル化していません。これは何だ:

typedef struct A {
  /* ... */
} B;

それstruct Aは と同じBです。それはtypedef: 新しい型を定義するだけで、長い名前を短く言い換えたものです。

void func(struct A);
void func(B); // exactly equivalent

継承とは関係ありません。

于 2012-09-16T06:19:14.323 に答える