문서 ID: 000073768 콘텐츠 형태: 문제 해결 마지막 검토일: 2011-09-14

부작용이 있는 논리적 또는 조건부 연산으로 인한 잘못된 결과

환경

  • 인텔® Quartus® II 구독 에디션
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    중요 문제

    설명

    C2H 컴파일러는 항상 논리 피연산자를 모두 평가합니다. (&&, ||) 및 조건부(?:) 연산자. 이는 예상되는 미국 국가 표준과 다릅니다 피연산자가 왼쪽에서 오른쪽으로 평가되는 ANSI(Institute) C 동작 불필요한 피연산자는 건너뜁니다.

    예를 들어, 표현식 (i-- && j--)에서 , 의 i 값이 0이면 ANSI C는 오른쪽(RHS) 표현식 j 이며 감소. 대조적으로, C2H 컴파일러는 양쪽을 평가합니다. j감소 .

    다음 표현식은 다음과 같은 다른 예입니다. 이 문제의 영향을 받습니다.

    if (i-- || j ) ...; a = ((cond == 1)? i : j );
    해결 방법

    연산자가 있는 논리 및 조건부 연산을 사용합니다. 부작용 없음. 부작용이 있는 작업에는 사전 및 사후 작업이 포함됩니다. 증가 및 감소 연산( , --), 메모리 연산 (*, , ., ->[]), 및 함수 호출.

    관련 제품

    이 문서는 다음 항목에 적용됩니다. 1 제품

    인텔® 프로그래밍 가능 장치

    이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.