2012-03-13 3 views
0

나는 다음과 같은 파일이 있습니다반환 값은 C에서 변경

FC :

#include <stdlib.h> 

double f(){ 
    return 12345; 
} 

main.c를 : 나는 처음으로 FC를 컴파일

#include <stdlib.h> 
#include <stdio.h> 
int main(){ 
    double ret = f(); 
    printf("%f\n", ret); 
} 

오브젝트 파일을 사용하는 오브젝트 파일

gcc -c fc -o fo

는 사용하여 결합

GCC f.o을 main.c -o a.out의

내가 12345.000000을 수 출력을 예상하고있어, 대신 내가 0.000000을 얻었다.

어떤 단계가 잘못 되었습니까?

답변

5

경고없이 컴파일하지 않았습니다.

당신이 말을하지 않았기 때문에

: 메인 프로그램에서

extern double f(void); 

는 C 컴파일러는 정수를 반환하는 기능을 생각해야했다. 컴파일러가 double의 4 바이트를 마치 int 인 것처럼 처리하고 그 결과를 double으로 다시 변환 할 때 결과가 누락됩니다.

컴파일러는 C99 또는 C2011 컴파일러가 아닌 C89 컴파일러를 사용하지 않는 한 범위에서 프로토 타입이 없다는 경고를 표시해야합니다. 더 많은 컴파일러 경고를 켜야 그런 실수에 대해 알게되고 그러한 문제에 부딪치지 않아야합니다.

f 함수를 선언하고 두 코드 모듈에 해당 헤더를 포함하는 헤더를 제공 할 수 있습니다. 헤더는 정의가 사용법과 일치하는지 확인하는 역할을합니다.

3

이 추가 :

double f(); 

int main(), 즉 :

#include <stdlib.h> 
#include <stdio.h> 
double f(); 
int main(){ 
    double ret = f(); 
    printf("%f\n", ret); 
}