a[i] = i++;
위의 코드가 작동하지 않는 이유는 무엇입니까?왜이 코드가 다음과 같지 않습니까? a [i] = i ++; 작업?
위의 코드에 어떤 문제가 있습니까? 나는 나의 지식을 향상시키기 위해이 질문을하고있다.
a[i] = i++;
위의 코드가 작동하지 않는 이유는 무엇입니까?왜이 코드가 다음과 같지 않습니까? a [i] = i ++; 작업?
위의 코드에 어떤 문제가 있습니까? 나는 나의 지식을 향상시키기 위해이 질문을하고있다.
ISO 표준에 따르면 사용자가 개입하는 시퀀스 포인트없이 변수를 두 번 이상 변경 (또는 변경 및 사용) 할 수 없다고되어 있기 때문입니다.
i
을 a[i]
에 사용하고 i
을 i++
으로 변경하는 사이에 시퀀스 포인트가 없습니다. 하여 기능 지정자의 평가와 실제 인수 함수 호출과 실제 통화 사이
C11에서 시퀀스 포인트의 목록 부속서 C에 설명되어 있습니다 (정말 C99 이후 많은 것이 변경되지 않음) .
및 5.1.2.3 Program execution
상태 A는 이전 또는 이후에 B 서열 때
평가 A 및 B는 불확실 서열화되어 있지만, 어느 불특정이다.
표현 A와 B의 평가 사이의 순서 점의 존재는 B와 관련된 모든 값 계산 및 부작용 전에 A와 관련된 모든 값 계산 및 부작용이 순서화된다는 것을 의미합니다.이러한 unsequenced 부작용이없는 순서의 발생하면
식의 하위 표현식의 여러 허용 개의 순서가있는 경우, 동작이 정의되지 :
6.5 Expressions
거의섹션 정확한 케이스를 커버 .
이 단락은
i = ++i + 1;
및a[i++] = i;
과 같이 정의되지 않은 명령문 표현식을 렌더링하는 반면i = i + 1;
및a[i] = i;
은 허용합니다.
예상대로 작동하지 않을 수 있습니다. 문제는 i
이 할당 전에 증가하는지 여부가 명확하지 않은 경우이며, 그렇다면 a[i]
은 배열의 다음 항목을 참조합니다.
귀하의 질문은 매우 간결한 것이므로 더 자세한 정보를 원할 경우 확대 할 수 있습니다. 그러나 구문이 할당하는 a
의 요소를 정확히 알기는 어렵습니다.
아니요, 작동하지 않습니다. * 정의되지 않은 동작 *입니다. –
@ Adam : 표준에 의해 정의되지 않은 동작만으로 작동하지 않는다는 것을 의미하지 않습니다. 구현에 따라 매우 효과적 일 수 있습니다. (*가 작동하지 않는다는 사실을 두려워하지 마십시오 *는 끔찍한 설명이며 개발자가 기술적 인 문제를 설명하려고 시도해서는 안됩니다.) –
어떤 오류가 발생합니까? – Habib
모든 변수를 선언 했습니까? – Ben
당신은 무엇을 얻고 있는지 또는 예상되는 결과를 얻지 못하고 있습니까? 무엇을하고 있습니까? – Vijay