2013-10-16 1 views
2

if 문에서 컴파일러가 다음 코드를 사용하고 "0이 아닌 정수를 포인터로 변환"경고를받습니다.경고 메시지 : 0이 아닌 정수를 포인터로 변환

나는 내 조건의 오른쪽을 큰 따옴표로 묶는 것을 포함하여 경고를 제거하기 위해 여러 가지 조합을 시도했다. "1"은 경고를 사라지게하지만 조건은 작동하지 않습니다.

if ((unsigned char*)buffer[8] == '1' && (unsigned char*)buffer[9] == '1') 
{ 
     unsigned char colorPtr = (unsigned char*)&buffer[10]; 
     singleColor(CDCInstance, lightCount, colorPtr, 6); 
} 

버퍼

답변

7

타입 캐스팅은 [] 연산자보다 낮은 precedence을 갖는다 * 보이드 타입이다. 현재 코드는 당신은 아마 대신

if (((unsigned char*) buffer)[8] == '1' && ((unsigned char*) buffer)[9] == '1') 
/*^     ^   ^     ^  */ 

을 의미

if ((unsigned char*) (buffer[8]) == '1' && (unsigned char*) (buffer[9]) == '1') 
/* note parentheses:^  ^      ^  ^ */ 

과 동일합니다.