가능한 중복 :
Undefined Behavior and Sequence PointsC/C++ 사후 증가/-decrement 및 함수를 호출
나는의 Microsoft Visual C를 사용하고 ++. 다음 예를 살펴 보겠습니다 :
int n = 5;
char *str = new char[32];
strcpy(str, "hello world");
memcpy(&str[n], &str[n+1], 6+n--);
printf(str);
// output is "hell world"
것은 그래서 unexpectadly 내 컴파일러는 다음 처음 감소시키고 N 및 방어 적이기을 실행하는 코드를 생성합니다. 다음 소스는 내가 기대했던 것을 할 것입니다 :
int n = 5;
char *str = new char[32];
strcpy(str, "hello world");
memcpy(&str[n], &str[n+1], 6+n);
n--;
printf(str);
// output is "helloworld"
처음에 나는 그것을 직접 설명하려고 노력했습니다. 마지막 매개 변수는 먼저 스택에 푸시되고, 먼저 평가 될 수 있습니다. 하지만 실제로 포스트 증가/감소가 다음 세미콜론 다음에 평가된다는 보장이 있다고 생각합니다.
void foo(int first, int second) {
printf("first: %i/second: %i", first, second);
}
int n = 10;
foo(n, n--);
이 의지 출력 "첫째 : 10/초 : 10"
그래서 나는 다음과 같은 테스트를 실행했습니다.내 질문은 :이 상황에 정의 된 동작이 있습니까? 누군가가 이것이 설명 된 문서를 가리킬 수 있습니까? 컴파일러 버그를 찾았습니까 ~~ O.O ~~?
이 예제는 더 이상 의미가 없도록 단순화되었으며, 단지 문제를 보여 주며 그 자체로 작동합니다.
정의 된 동작 => no – ipc
@ipc : 매번 저를 혼란스럽게합니다. 왜 "지정되지 않은"동작이 아닌 "정의되지 않은"동작입니까? 불특정 다수의 주장에 대한 평가의 순서 만이 아닌가? –
http://parackoverflow.com/questions/376278/parameter-evaluation-order-before-a-function-calling-in-c – chris