-1
私はC言語では新しく、関数からポインタ変数にポインタを戻そうとしています。この "[警告]割り当ては、キャストのない整数からポインタを作成します"コンパイラがint 。 mainの前に自分の関数を宣言することはできません。この関数は、 "未定義の参照を` free_block 'にスローします。 "関数からのポインタ
#include <stdio.h>
#include <stdlib.h>
struct block{
int num;
};
int main(int argc, char *argv[]) {
struct block *b;
b = free_block();
struct block *free_block(){
struct block *b = NULL;
return b;
}
return 0;
}
私はCの構文についてはあまり知らないし、ネストされた機能、SOZについてわからなかった
いや、私のせいで、ありがとうございました。 しかし、この場合間違っている可能性があります: 私はmallocまたはcalloc関数を使用せずに自分のメモリアロケータを作ろうとしています。私のコードでは、pointer = free_space_get(size);
の行に同じ警告があります。ここでは、func()はネストされていません。main()より前に定義されたメソッドですが、まだ考えていません。私に与えられた答えは、main()の前に関数が定義されるとすぐにうまくいきました。すべての関数の最初に、それらが呼び出される前に宣言する必要があります。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct header{
size_t size;
struct header *next;
unsigned int free;
};
void *m_alloc(size_t size){
size_t total_size;
void *block;
struct header *pointer;
if(!size)
return NULL;
pointer = free_space_get(size);
if(pointer){
pointer->free = 0;
return (void*)(pointer + 1);
}
}
struct header *get_free_space(size_t size){
struct header *b = NULL;
return b;
}
int main() {
return 0;
}
2つの問題として再記述することができます。第二に、Cには入れ子関数がありません。私はあなたが[良い初心者の本をいくつか](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)読むことをお勧めします。 –
関数を呼び出す前に定義または宣言する必要があります。 – Barmar
関数の暗黙的な宣言についての警告も受け取ったはずです。なぜそれをintと定義するのかという手がかりを与えてくれるはずです。 – Barmar