2016-11-18 15 views

답변

1

코드는 표준에서 다루지 않는 동작에 의존합니다. 따라서 코드가 다른 컴파일러, 다른 컴파일러에서 다르게 동작 할 수 있으며 주변 코드에 따라 다르게 동작 할 수도 있습니다.

분리 시퀀스 포인트없이 tab[i+1]을 평가하여 할당하는 것이 문제입니다. 프로그램에서 왼쪽에서 오른쪽으로 계산을 수행하지만 C 표준은이를 필요로하지 않는다고 생각할 수도 있습니다. 컴파일러는 코드를 다음과 같이 컴파일 할 수 있습니다.

tab[i+1] = tab[i]; 
tab[i] = tab[i+1] - tab[i] + tab[i+1]; 

별도의 메모. 두 개의 변수를 교환하는 것은 고도로 최적화하고 쉽게 인식 할 작업입니다, 어떤 최적화 컴파일러는 당신이 쓰는 경우 가장 빠른 지침을 선택합니다 :

int temp = tab[i]; 
tab[i] = tab[i+1]; 
tab[i+1] = temp; 
+0

이 매우 포괄적이고 교육 응답을 주셔서 감사합니다! – residue