2014-02-11 2 views
1

코드 1 ('구조체 데모'와 '구조체 데모'가) :오류 : 바이너리 ==에 유효하지 않은 피연산자

struct demo 
{ 
    int a; 
}d[2]; 

int main() 
{ 
    d[0].a=5; 
    d[1]=d[0]; 
    return 0; 
} 

이 코드가 작동을 잘

코드 2 :

struct demo 
{ 
    int a; 
}d[2]; 

int main() 
{ 
    d[0].a=5; 
    d[1]=d[0]; 
    if(d[0]==d[1]) 
    { 
     printf("hello"); 
    } 
return 0; 
} 

이 코드는 에러 메시지를냅니다.

error: invalid operands to binary == (have 'struct demo' and 'struct demo') 

왜이 오류가 발생합니까? 코드 2에서 oming?

+1

임의의 구조체를'=='와 비교할 수 없으며, 자신의 비교 함수를 쓰거나'memcmp '를 사용할 수 있습니다. – user2802841

+0

@Barmar 왜이 모든 답변들은'memcmp'에 대한 것입니까? 나는 그것을 얻지 못한다. 구조체의 패딩은 우리가 그 값을 알 수 없다. 에 대한 다른 연결된 대답, 그래서 이상한. –

답변

3

는이 같은 구조체 자신의 구성원을 비교해야합니다

if(d[0].a ==d[1].a) 

구조체 평등 (==) 유효 피연산자하지 않은, 피연산자는 산술 유형으로하거나 포인터. 우리는 draft C99 standard 섹션에서이 볼 수 6.5.9평등 사업자 :

One of the following shall hold:

  • 두 피연산자가 두 피연산자가 모두 호환 유형의하거나 규정 버전에 대한 포인터는
  • 연산 유형이;
  • 하나의 피연산자는 객체 또는 불완전한 유형에 대한 포인터이고 다른 하나는 공인 자격 또는 비 수식 버전에 대한 포인터입니다. 또는
  • 하나의 피연산자는 포인터이고 다른 하나는 널 포인터 상수입니다.
관련 문제