programing

malloc을 사용할 때마다 경고가 뜨는 이유는 무엇입니까?

itsource 2022. 7. 28. 22:54
반응형

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이 기능은 빌트인과 호환되지 않습니다.malloc그 때문에,size_t및 a를 반환한다.void*).

아직 안 했어#include <stdlib.h>.

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

#include <stdlib.h>

이 헤더 파일을 포함하지 않으면 함수를 컴파일러가 알 수 없습니다.그럼 신고되지 않은 걸로 보는군요

자신의 기능을 찾아보는 습관을 들이세요.

C에 대한 대부분의 도움말은 unix 매뉴얼페이지에서 모델화되어 있습니다.

사용방법:

man malloc

꽤 유용한 결과를 얻을 수 있습니다.

구글링man malloc제가 무슨 말을 하는지 보여드릴게요.

unix 에서는 관련된 것에 대해서도 apropos를 얻을 수 있습니다.

다른 매우 좋은 답변 외에, 저는 작은 트집을 잡아서 다른 답변에서 아직 논의되지 않은 것을 다루고 싶습니다.


리눅스 사용 시malloc()당신의 코드로,

실제로 그럴 필요는 없다. #include <stdlib.h>.

(단,stdlib.h이 기능은 매우 일반적이며, 모든 비장난감 프로그램에는 모두 포함되어 있어야 합니다.이는 유용한 C 표준 라이브러리 기능과 매크로가 폭넓게 제공되기 때문입니다.)

또,#include <malloc.h>대신.

단, 주의해 주십시오.malloc.h는 더 이상 사용되지 않으며, 이로 인해 코드가 이식 불가능하게 됩니다.사용하고 싶은 경우malloc()당신은 항상 그리고 영원히 해야 한다(그렇지 않은 경우에는 명시적인 이유를 제외한다)#include <stdlib.h>.

이유는 다음 질문에 대한 답변에서 가장 잘 설명되어 있습니다.

<stdlib>의 차이.h > 및 <syslogoc>를 참조해 주세요.h>

언급URL : https://stackoverflow.com/questions/1230386/why-do-i-get-a-warning-every-time-i-use-malloc

반응형