C4013: не определено;предполагая, что extern возвращает int - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь создать функцию 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 ()'

В чем проблема?В структуре или типе функции?

1 Ответ

0 голосов
/ 07 октября 2018

В memory_alloc(), когда ваш компилятор встречает функцию find_fit(), он ничего не знает об этом, поскольку он определен позже.Поэтому компилятор вынужден делать предположения о find_fit(), и эти предположения вообще не соответствуют вашему коду.Вот почему компилятор кричит на вас.

Решение: компилятор должен знать о find_fit(), прежде чем вводить memory_alloc()

  • , либо объявить его выше memory_alloc() (или в отдельном файле .h, который вы включаете в начало файла .c) со строкой

    void *find_fit(unsigned int size);
    
  • , или определите его до memory_alloc(), т. е. просто переместите find_fit() вышеэто
...