[c] malloc을 사용할 때마다 경고가 표시되는 이유는 무엇입니까?

malloc내 코드에서 사용하는 경우 :

int *x = malloc(sizeof(int));

다음에서이 경고를받습니다 gcc.

new.c:7: warning: implicit declaration of function malloc  
new.c:7: warning: incompatible implicit declaration of built-in function malloc



답변

다음을 추가해야합니다.

#include <stdlib.h>

이 파일에는 내장 함수에 대한 선언이 포함되어 있습니다 malloc. 그렇게하지 않으면 컴파일러 malloc는 이름이 지정된 함수를 정의하고 싶다고 생각하고 다음 과 같은 이유로 경고합니다.

  1. 당신은 명시 적으로 선언하지 않는
  2. 암시 적으로 선언 된 것과 다른 서명을 가진 해당 이름의 내장 함수가 이미 있습니다 (함수가 암시 적으로 선언 될 때 반환 및 인수 유형은 내장 함수와 int호환되지 않는으로 간주됩니다 .) in malloc, a를 취하고 a) size_t를 반환합니다 void*.

답변

당신은하지 않았습니다 #include <stdlib.h>.


답변

함수를 선언하는 헤더 파일을 포함해야합니다. 예를 들면 다음과 같습니다.

#include <stdlib.h>

이 헤더 파일을 포함하지 않으면 함수가 컴파일러에 알려지지 않습니다. 그래서 그것은 선언되지 않은 것으로 간주합니다.


답변

도움을 받아 기능을 찾는 습관을들이십시오.

C에 대한 대부분의 도움말은 유닉스 매뉴얼 페이지에서 모델링됩니다.

사용 :

man malloc

매우 유용한 결과를 제공합니다.

인터넷 검색 man malloc은 내가 의미하는 바를 보여줄 것입니다.

유닉스에서는 관련된 것들에 대한 제안도 얻습니다.


답변

다른 매우 좋은 답변 외에도 약간의 간단한 작업을 수행하고 다른 답변에서 아직 논의되지 않은 것을 다루고 싶습니다.


Linux에있을 때 malloc()코드에서 사용하려면

당신은 실제로 할 필요가 없습니다 #include <stdlib.h> .

(의 사용 stdlib.h은 매우 일반적이며 아마도 장난감이 아닌 모든 프로그램은 유용한 C 표준 라이브러리 함수와 매크로를 광범위하게 제공하기 때문에 어느 쪽이든 포함해야합니다)

#include <malloc.h>대신 할 수도 있습니다 .

그러나의 사용 malloc.h은 더 이상 사용되지 않으며 코드를 이식 할 수 없게 만듭니다. 당신이 사용하고 싶다면 malloc()당신은 항상 (명시적인 이유를 제외하고) 항상해야합니다 #include <stdlib.h>.

이유 가장이 질문에 대한 답변에 설명되어 있습니다 :

<stdlib.h>와 <malloc.h>의 차이점


답변