즉
C99
초안 표준 섹션
6.5
단락
3
에서 더 나은 최적화 컴파일러를 수 있기 때문에 당신은 그것을 평가 순서는 C에 지정되지 않은
undefined behavior
이기 때문에이 프로그램의 출력에 의존 할 수
:
연산자 및 피연산자의 그룹화는 제외) syntax.74 의해 지시된다 & &, || (함수 호출 (대해) 이상 를 지정된, :, 및 콤마 연산자)의 평가 순서 서브 표현식 및 부작용이 발생하는 순서는 모두 unsp ecified. 당신이 k
의 값을 액세스하고 같은 sequence point
에에 할당되기 때문에
는 또한 정의되지 않습니다. 객체가 표현의 평가에 의해에서 가장 번 수정의 저장된 값 를 가진다 이전 및 다음 시퀀스 지점 사이
: 초안 표준 섹션 6.5
단락 2
에서. 또한 이전 값 은 저장할 값을 결정하기 위해 읽기 전용이어야합니다.
가 정의되어 있지 않다고로 다음 코드 예제를 인용 :
i = ++i + 1;
a[i++] = i;
업데이트
함수 호출에 쉼표가 일련의 점으로 행동 여부에 관한 의견이 있었다 또는 아니. 우리가 절을 보면 6.5.17 Comma operator
단락 2
는 말한다 :
쉼표 연산자의 왼쪽 피연산자는 무효의 표현으로 평가된다; 평가 후 시퀀스 포인트가 있습니다.
그러나 단락 3
말한다 :
예 구 (본 항에서 설명) 콤마 연산자로 나타낸 바와 쉼표가 별도의 항목에 사용되는 경우 컨텍스트에 표시 할 수없는 목록 (예 : 함수에 대한 인수 또는 초기화 자 목록).
이 경우 쉼표는 시퀀스 포인트를 도입하지 않습니다.
이는 '정의되지 않은'동작의 예입니다. –
운영자 우선 순위는 여기에서 부적합합니다. GCC 버전 4.4.3에서 – harold
gcc 버전 4.4.3은 '0 50 0'입니다. ( –