Этот файл включает объявление встроенной функции malloc. Если вы этого не сделаете, компилятор решит, что вы хотите определить свою собственную функцию с именем, mallocи предупредит вас, потому что:
Вы не заявляете об этом явно и
Уже существует встроенная функция с этим именем, которая имеет сигнатуру, отличную от той, которая была неявно объявлена (когда функция объявляется неявно, предполагается int, что ее возвращаемый тип и типы аргументов не совместимы со встроенным in malloc, который принимает a size_tи возвращает a void*).
Нит терминологии: в C. нет такой вещи, как встроенная функция. Malloc - это просто функция из стандартной библиотеки C.
Йенс
5
@Jens. Я не вижу проблемы с упоминанием стандартных библиотечных функций как встроенных, как и люди из gcc, очевидно, поскольку в сообщении об ошибке тоже используется слово «встроенный» (вот почему я так и сделал).
sepp2k
7
@ sepp2k Ну, я сделать вижу проблему. Использование нестандартное. Компиляторы могут иметь встроенные функции, а gcc может иметь встроенный malloc. Но как я уже писал, в C нет встроенных функций.
Только если вы уже знаете, что строка #include <stdlib.h>в синопсисе означает, что вы должны записать это в своей программе.
Механическая улитка
1
Если кто-то читал здесь другие ответы, то теперь они это знают.
MikeKulls
0
Помимо других очень хороших ответов, я хотел бы сделать небольшую придирку и затронуть то, что еще не обсуждается в других ответах.
Когда вы работаете в Linux, чтобы использовать malloc()в своем коде,
На самом деле это не обязательно#include <stdlib.h> .
(Хотя использование stdlib.hочень распространено и, вероятно, каждая программа, не являющаяся игрушечной, должна включать его в любом случае, потому что она предоставляет широкий спектр полезных функций стандартной библиотеки C и макросов)
Вы также могли бы #include <malloc.h>вместо этого.
Но обратите внимание, что использование malloc.hне рекомендуется, и это делает ваш код непереносимым. Если вы хотите использовать, malloc()вы должны всегда и всегда (за исключением явных причин, чтобы сделать иначе) #include <stdlib.h>.
Причины почему лучше всего объясняются в ответах на этот вопрос:
Вы еще не сделали
#include <stdlib.h>
.источник
Вам необходимо включить заголовочный файл, объявляющий функцию, например:
Если вы не включите этот файл заголовка, функция не известна компилятору. Поэтому он считает это необъявленным.
источник
Возьмите за привычку искать свои функции в справке.
Большая часть справки для C смоделирована на страницах справочника unix.
С помощью :
дает довольно полезные результаты.
Поиск в Google
man malloc
покажет вам, что я имею в виду.В unix вы также получаете информацию о связанных между собой вещах.
источник
#include <stdlib.h>
в синопсисе означает, что вы должны записать это в своей программе.Помимо других очень хороших ответов, я хотел бы сделать небольшую придирку и затронуть то, что еще не обсуждается в других ответах.
Когда вы работаете в Linux, чтобы использовать
malloc()
в своем коде,На самом деле это не обязательно
#include <stdlib.h>
.(Хотя использование
stdlib.h
очень распространено и, вероятно, каждая программа, не являющаяся игрушечной, должна включать его в любом случае, потому что она предоставляет широкий спектр полезных функций стандартной библиотеки C и макросов)Вы также могли бы
#include <malloc.h>
вместо этого.Но обратите внимание, что использование
malloc.h
не рекомендуется, и это делает ваш код непереносимым. Если вы хотите использовать,malloc()
вы должны всегда и всегда (за исключением явных причин, чтобы сделать иначе)#include <stdlib.h>
.Причины почему лучше всего объясняются в ответах на этот вопрос:
разница между <stdlib.h> и <malloc.h>
источник