2010-03-09 6 views
1

RefTables.pc 파일이 있습니다.C .pc 파일 경고

RefTables.c:109: warning: type defaults to `int' in declaration of `sqlcxt' 
RefTables.c:111: warning: type defaults to `int' in declaration of `sqlcx2t' 
RefTables.c:113: warning: type defaults to `int' in declaration of `sqlbuft' 
RefTables.c:114: warning: type defaults to `int' in declaration of `sqlgs2t' 
RefTables.c:115: warning: type defaults to `int' in declaration of `sqlorat' 

어떻게 제거 할 수 있습니다 : 나는 make 명령을 실행하면

,이 경고를?

나는 리눅스 & gcc 컴파일러를 사용하고 있습니다.

답변

1

5 가지 위반 신고 유형을 지정하여 경고를 제거 할 수 있습니다. 실제로, 그것들은 전혀 타입을 가지지 않고 선언 되어야만하는데, 디폴트는 C에서 int가되지만 (경고를 발생시킨다).

편집 : Google에서이 신고를 발견했습니다.

extern sqlcxt (/*_ void **, unsigned int *, struct sqlexd *, struct sqlcxp * _*/); 

함수에 반환 유형이 없습니다. 그것은 하나 있어야합니다. 다음과 같이 적는다.

extern int sqlcxt (/*_ void **, unsigned int *, struct sqlexd *, struct sqlcxp * _*/); 

또는 이러한 경고를 무시하기 위해 컴파일러 명령 줄에서 수동으로 상태를 지정할 수 있습니다. 더 이상 표시되지 않습니다.

+0

경고를 어떻게 제거 할 수 있습니까? 자세히 설명해 주시겠습니까?귀하의 조언을 주셔서 감사합니다 – ambika

0

앞으로는 경고와 함께 코드 스 니펫을 제공하여 작업 할 몇 가지 컨텍스트를 마련하십시오. 그렇지 않으면 실제 문제가 무엇인지 추측 할 수 있습니다.

sqlcxt, sqlcx2t 등이 함수라고 가정합니다. 소스 코드를 보지 않고도 사용하기 전에 범위에있는 함수에 대한 선언이없는 것 같습니다. 여기

내가 무엇을 의미하는지에 대한 간단한 예입니다 :

컴파일러는 mainfoo에 대한 호출을보고
int main(void) 
{ 
    foo(); 
    return 0; 
} 

void foo(void) 
{ 
    // do something interesting 
} 

,이 범위에서 선언이없는, 그래서 foo 반환하지 int로 가정합니다 무효, 그리고 당신이 위에서 얻은 것과 비슷한 경고를 반환합니다.

함수가 호출 될 때 동일한 파일에 정의 된 경우이 문제를 해결하는 데는 두 가지 방법이 있습니다. 그것을 사용하기 전에 내 선호하는 방법은 함수를 정의하는 것입니다 : 그것은 이러한 기능 같은 소리

void foo(void); 

int main(void) 
{ 
    foo(); 
    return 0; 
} 

void foo(void) 
{ 
    // do something interesting 
} 

이 부분은 다음과 같습니다

void foo(void) 
{ 
    // do something interesting 
} 

int main(void) 
{ 
    foo(); 
    return 0; 
} 

또 다른 방법은 그것을 호출하기 전에 범위에서 함수의 선언을하는 것입니다 데이터베이스 API의; 그렇다면,이 이러한 기능에 대한 선언을 포함하는 헤더 파일이어야하고, 그 헤더는 소스 파일에 포함되어야하는 데 도움이

/** foo.c */ 
#include "foo.h" 

void foo(void) 
{ 
    // do something interesting 
} 
/** end foo.c */ 

/** foo.h */ 
#ifndef FOO_H 
#define FOO_H 

void foo(void); 

#endif 
/** end foo.h */ 

/** main.c */ 
#include "foo.h" 

int main(void) 
{ 
    foo(); 
    return 0; 
} 
/** end main.c */ 

희망. 내가 * C 프로 사용하기 때문에

1

그것은 오랜만이야,하지만 난 당신이라는 기능에 대한 프로토 타입을 줄 것이다 PROC 명령 줄

code=ANSI_C 

에 명령 줄 옵션을 추가 할 수 있다고 생각합니다.

+0

. 하지만 Makefile & make 명령을 사용하여 컴파일했습니다. 어떻게 proc 명령을 사용할 수 있습니까? – ambika

+0

메이크 파일의 .pc 파일에서 .c 파일을 생성하는 명령은 무엇입니까? –