4

私は物事を単純に保ちます:

これは私が作成した関数で、新しい dnode を作成します。

struct dnode *dnode_create() {
        return calloc(1, sizeof(struct dnode));
    }

そして、これが私がそれを呼び出す方法です:

struct dnode *newnode = dnode_create();

これが整数とどのように関係しているのかわかりませんか?

4

1 に答える 1

11

プロトタイプを使用しようとしたときに、プロトタイプが表示されていないかのどちらcallocかです。dnode_create

つまり、int戻り値の型を想定しているため、警告メッセージが表示されます。

のプロトタイプが確実callocに表示されるようにするには、stdlib.hヘッダー ファイルをインクルードします。

の場合はdnode_create、次のいずれかの方法で自分で行う必要があります。

  • 関数を使用する前に (特定のソース ファイルで) 定義する。また
  • 使用する前にプロトタイプを宣言します。

それを拡張すると、単一の翻訳単位 (単純に言えば、ソース ファイル) でこのように並べられていると仮定すると、これらは両方とも機能します。初め:

struct dnode *dnode_create (void) {         // declare & define
    return calloc(1, sizeof(struct dnode));
}
:
{   // inside some function
    struct dnode *newnode = dnode_create(); // use
}

または:

struct dnode *dnode_create (void);          // declare
:
{   // inside some function
    struct dnode *newnode = dnode_create(); // use
}
:
struct dnode *dnode_create (void) {         // define
    return calloc(1, sizeof(struct dnode));
}

void上記の両方のケースで、関数宣言で使用したことにも気付くでしょう。それ (パラメーターなし) と空のパラメーター リスト (不確定な数のパラメーター) の間には微妙な違いがあります。パラメータのない関数が本当に必要な場合は、前者を使用する必要があります。

于 2013-09-04T02:36:31.657 に答える