나는 다음과 같은 C 코드를 한 :gcc가 "round '함수의 암시 적 선언을보고하는 이유는 무엇입니까?
#include <math.h>
int main(int argc, char ** argv)
{
double mydouble = 100.0;
double whatever = round(mydouble);
return (int) whatever;
}
나는이를 컴파일 할 때, 나는 경고를 얻을 : 나는 C와 녹슬
round_test.c: In function ‘main’:
round_test.c:6: warning: implicit declaration of function ‘round’
round_test.c:6: warning: incompatible implicit declaration of built-in function ‘round’
을,하지만 난 #INCLUDE이 선언을 가져 생각 round()에서 범위로. round() 함수가 math.h 헤더에 있음을 확인하는 ANSI 표준 (C99 만 가지고 있음)을 확인했습니다. 내가 여기서 무엇을 놓치고 있니?
편집 : 컴파일러는 Ubuntu의 GCC 4.3.2입니다 (intrepid, IIRC). gcc -E를 실행하면 다음과 같이 나타납니다.
$ gcc -E round_test.c | grep round
# 1 "round_test.c"
# 1 "round_test.c"
# 2 "round_test.c" 2
double whatever = round(mydouble);
따라서 헤더에 정의가 분명히 없습니다.
감사합니다. -std = c99가 문제를 해결 한 것 같습니다. 나는 round()가 C99 추가 였음을 깨닫지 못했다. (그리고 물론 내 모든 참조는 C99이고 이것을 언급하는 것을 게을리한다.) –
(놀란 표정) round()는 정말로 C99 추가인가? –
맞아요, C89는'round()'함수를 설명하지 않았습니다 (물론 컴파일러는 그것을 확장으로 제공 할 수 있습니다). – pmg