2012-06-12 5 views
1

Solaris에서 C 프로그램을 컴파일하고이 경고를받습니다.경고 : 부적절한 포인터/정수 조합 : op "="

line 68: warning: improper pointer/integer combination: op "=" 

내 코드

struct cmsghdr *cmsg; 

라인 (68)은

cmsg = CMSG_FIRSTHDR(&msg); 

구조에 오는 cmsghdr 및 CMSG_FIRSTHDR 내가 소켓 포함했다

#define CMSG_FIRSTHDR(m) 
-- 
-- 

struct cmsghdr { 
     socklen_t  cmsg_len; 
     int    cmsg_level; 
     int    cmsg_type; 
}; 

로 socket.h에 정의되어 포함 .h 내 코드에서. 하지만 여전히 나는이 오류가 발생합니다.

+0

'SOL_SOCKET'이 (가) 포인터인지 확인해 주시겠습니까? – Shahbaz

+0

line 68은 "cmsg = CMSG_FIRSTHDR (&msg);" – Tinyspark

+0

입니다. 그렇다면 CMSG_FIRSTHDR 매크로의 모양을 알려주십시오.) –

답변

-1

SOL_SOCKET 유형을 확인하십시오. int 여야합니다. 일치하지 않으면 구조체의 "cmsg_level"필드의 유형을 변경하십시오.

내가 SOL_SOCKET를 추측 포인터, 어쩌면 INT *

+0

.H, SOL_SOCKET는 "#DEFINE의 SOL_SOCKET 0xffff가/* 소켓 레벨 옵션 * /"로 정의하면 일반적으로 얻을 – Tinyspark

+0

경고가 제대로 나는 다른 생각이없는 모든이 켜지지 헤더 파일을 포함하지 않는 것을 의미한다 -. 죄송합니다 –

+0

필자가 분석 한 바에 따르면 "cmsghdr"은 socket.h에서만 정의되며 다른 어떤 머리에도 존재하지 않습니다 어 파일. – Tinyspark

0

CMSG_FIRSTHDR 매크로 적절한 타입 캐스팅을하지 않을 가능성이 있습니다, 그래서 당신은 스스로를해야 할 : 그것은 또한 수도

cmsg = (struct msghdr *) (CMSG_FIRSTHDR(&msg)); 

을 매크로 자체 내에 부적절한 캐스팅이있을 수 있습니다.이 경우 시스템 헤더에있는 것처럼 수행 할 수있는 작업이 없습니다.