2012-11-04 2 views
3
gcc 4.7.2 c89 

안녕하세요,포인터/정수 형식이 일치하지

나는 다음과 같은 경고 점점 오전 :

pointer/integer type mismatch in conditional expression 

나는 다음과 같은 CFLAGS -Wall -Wextra

fprintf(stderr, "'Failed to open file' Error [ %s ]\n", 
     (errno == 0) ? "None" : strerror(errno)); 

프로그램 컴파일 오전 괜찮 았어,하지만 그 경고가 전부라는 걸 알 수가 없어. "없음"과 strerror (errno)는 정수 값이 아닌 문자열을 반환합니다. 그리고 errno 숫자를 0으로 비교합니다. 어떤 제안에 대한

많은 감사합니다, 당신은 <string.h> 헤더를 포함 여부

+0

아니요. 나는 그것을 포함 시켰으며 경고가 사라졌다. 이것은 string.h가 strerror 함수를 포함하기 때문입니다. 그러나, 그게 사실이고 나는 맨 페이지에서 그것을 보았다. 그래서 나에게 컴파일 에러를 주면 안된다. 감사. – ant2009

+1

C 언어는 오래전에 선언없이 함수를 사용할 수있게했습니다. 그런 다음 함수가'int'를 리턴했다고 가정합니다. 이 동작은 현재 비표준이 되었기 때문에 (결과적으로 발생하는 결과로 인해) 많은 컴파일러는 이전 코드와의 호환성을 위해 여전히이를 수용합니다. 나는 당신이'-Wall -Wextra'를 사용하여 (조건 적 표현뿐만 아니라 함수 사용을위한) 경고를 얻지 못해 놀랐습니다. –

답변

5

확인합니다. 그렇지 않은 경우, strerror의 리턴 값은 정수 값으로 간주 될 수 있습니다. 컴파일러가 경고를 표시하는 반면에 프로그램이 정상적으로 실행되는 이유 (링커는 strerror이라는 일치 함수를 찾을 수 있습니다. C 표준 라이브러리가 기본적으로 연결되어 있기 때문입니다).

+0

감사합니다. 문제가 해결되었습니다. – ant2009

관련 문제