부작용
언어 평가 특정 순서 대로 보장 하는 경우 식의 계산 순서를 특정 구현에서 제외 정의 됩니다 (에 설명 된 대로 순서를 평가 하 고 우선).예를 들어, 부작용은 다음 함수 호출을 발생합니다.
add( i + 1, i = j + 2 );
myproc( getc(), getc() );
함수 호출의 해당 인수는 순서에 관계 없이 평가할 수 있습니다.식 i + 1 전에 계산 될 수 있습니다 i = j + 2, 또는 i = j + 2 전에 계산 될 수 있습니다 i + 1.경우에 따라 발생합니다.마찬가지로 어떤 문자 실제로 전달 됩니다 보장할 수는 없습니다 있는 myproc.단항 증가 및 감소 된 이후 작업 배정 관련, 다음 예제에서와 같이 이러한 작업 파생 작업이 발생할 수 있습니다.
x[i] = i++;
이 예제에서는 값을 x 즉 수정 예측할 수 없습니다.값은 아래 첨자의 새로운 또는 기존 값을 수 있습니다 i.그 결과 다른 컴파일러나 다른 최적화 수준에서 달라질 수 있습니다.
C 부작용의 계산 순서를 정의 하지 않는 있으므로 위에서 설명한 두 가지 평가 방법 올바른 이며 하나를 구현할 수 있습니다.코드를 이식 가능 하 고 명확한 지 확인 하려면 문을 부작용에 대 한 평가 특정 순서에 따라 달라 집니다 하지 마십시오.