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
다음과 같은 이유로 경고합니다.
- 명시적으로 선언하지 않고
- 해당 이름의 빌트인 함수는 암묵적으로 선언된 것과 다른 시그니처를 가지고 있습니다(함수가 암묵적으로 선언된 경우 반환 및 인수 유형은 다음과 같이 간주됩니다.
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
'programing' 카테고리의 다른 글
반복자를 목록으로 변환 (0) | 2022.07.28 |
---|---|
Java에서 파일로 바이트 [] (0) | 2022.07.28 |
다른 vuex 모듈에서 getter에 액세스하는 방법 (0) | 2022.07.28 |
Vuex 작업, vuex 모듈 및 사용자 지정 이름의 mapActions (0) | 2022.07.28 |
Java에서 컴퓨터의 CPU, 메모리 및 디스크 사용량을 모니터링하려면 어떻게 해야 합니까? (0) | 2022.07.28 |