2013-05-12 3 views
0

"man"페이지에서 inet_ntop처럼 보이는 것은 NULL과 비교할 때 괜찮은 문자열 (const char *)을 반환합니다. 하지만, 내 프로그램에서 나는 말한다이 코드 블록의 첫 번째 줄에서 컴파일러 경고를 얻을 :C에서 inet_ntop을 사용할 때 포인터와 정수의 비교

경고 : 포인터와 정수

의 비교.

if(inet_ntop(address->sa_family, numericAddress, addrBuffer, sizeof(addrBuffer)) == NULL) 
    { 
     fputs("invalid address", stream); 
    } 

불행하게도 나는 그것이 포인터와있는 것이 정수로 보는 하나로보고 어느 구별 할 수 없습니다 : 올바른 매개 변수가 전달되고 가정이 뭔가 문제가있다. 미리 감사드립니다!

답변

2

"arpa/inet.h"파일을 포함 시켰습니까?

"arpa/inet.h"에는 inet_ntop 선언이 포함되어 있습니다. 포함시키지 않으면 컴파일러는 inet_ntop이 int를 반환한다고 판단합니다.

+0

왜 선언되지 않은 함수가 나오지 않습니까? –

+1

@MattVaughan C에서 컴파일러가 선언되지 않은 함수를 발견하면'int'를 리턴한다고 가정합니다. 반환 된 값을 포인터와 비교할 때 ('NULL'은'void *'로 정의됩니다) 경고를받습니다. 물론 정의되지 않은 동작을 일으킬 수있는 함수 인수와의 불일치가있을 수도 있습니다. –

+1

C 언어 (적어도 C89)에는 암시 적 함수 선언 개념이 있습니다. 프로토 타입이없는 함수는 함수 호출에서 첫 번째 사용에서 파생 된 반환 형식 및 arg 목록을 가지며 그 함수가 없으면 int를 반환하고 불특정하지만 고정 된 수의 인수. 컴파일러 옵션에서 -Wimissing-prototypes를 추가 할 수 있습니다. –

관련 문제