私は物事を単純に保ちます:
これは私が作成した関数で、新しい dnode を作成します。
struct dnode *dnode_create() {
return calloc(1, sizeof(struct dnode));
}
そして、これが私がそれを呼び出す方法です:
struct dnode *newnode = dnode_create();
これが整数とどのように関係しているのかわかりませんか?
プロトタイプを使用しようとしたときに、プロトタイプが表示されていないかのどちら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
上記の両方のケースで、関数宣言で使用したことにも気付くでしょう。それ (パラメーターなし) と空のパラメーター リスト (不確定な数のパラメーター) の間には微妙な違いがあります。パラメータのない関数が本当に必要な場合は、前者を使用する必要があります。