c - C4013:未定义;假设 extern 返回 int
问题描述
我正在尝试创建 malloc 函数,并在此代码中:
typedef struct hlavicka
{
unsigned int velkost;
struct hlavicka *dalsi;
struct hlavicka *pred;
} HLAVICKA;
struct hlavicka *blok;
void init(void *ptr, unsigned size)
{
blok = ptr;
blok->velkost = 1;
blok->dalsi = blok;
blok->pred = blok;
}
void *memory_alloc(unsigned int size)
{
HLAVICKA *ptr = NULL;
int nova_velkost = size + sizeof(HLAVICKA);
ptr = find_fit(nova_velkost);
if ((long)ptr == -1)
return NULL;
else
{
*(unsigned int *)ptr = size;
return (void *)((char*)ptr + sizeof(HLAVICKA));
}
}
void *find_fit(unsigned int size)
{
HLAVICKA *pom_ptr;
for (pom_ptr = blok->dalsi; (pom_ptr != blok) && (pom_ptr->velkost < size); pom_ptr = pom_ptr->dalsi)
if (pom_ptr != blok)
return pom_ptr;
}
int main()
{
char region[50], *pointer;
init(region, 50);
pointer = (char*)memory_alloc(10);
return 0;
}
我有三个错误:
warning C4013: 'find_fit' undefined; assuming extern returning int
warning C4047: '=' : 'HLAVICKA *' differs in levels of indirection from 'int'
error C2040: 'find_fit' : 'HLAVICKA *(unsigned int)' differs in levels of indirection from 'int ()'
问题出在哪里?在结构或函数类型中?
解决方案
在memory_alloc()
中,当您的编译器遇到 functionfind_fit()
时,它对它一无所知,因为它是稍后定义的。因此,编译器被迫做出假设,find_fit()
而这些假设与您的代码完全不匹配。这就是编译器对你大喊大叫的原因。
find_fit()
解决方法:编译器在进入前必须知道memory_alloc()
或者在上面声明它(或者在文件顶部包含
memory_alloc()
的单独文件中).h
.c
void *find_fit(unsigned int size);
- 或之前定义它
memory_alloc()
,即只是find_fit()
在它上面移动
推荐阅读
- python - 我需要知道如何使用 Tkinter 在同一个 var 上执行两个命令
- unity3d - 我们可以创建一个与脚本统一的小玩意儿吗?
- java - 为什么 Spring 的 @Transactional 可以在没有代理的情况下工作?
- r - R中的累积乘法加上额外的常数
- node.js - 无法通过 npm 安装 create-react-app
- php - 在 php 中覆盖 $_SESSION 变量
- gcc - 使用 -O2 时的 ARM GCC 硬故障
- angular - Ionic / Angular 5 - 存储进入外部功能
- python-3.x - pip - 安装依赖项
. 使用`pip install -e` - c - 为什么数组索引和地址与分配给数组的字符串具有相同的值?