[질문] UNIX에서 a = a++ ; 의 문제점?
글쓴이: bizzare / 작성시간: 목, 2006/02/23 - 12:56오후
아주 이상한 현상을 발견해서 이렇게 질문을 올립니다.
#include <stdio.h> int main() { int a = 0; a = a++; printf("a = %d\n", a); return 0; }
위와 같은 코드를
MSVC6.0에서 돌려봤습니다.
그 결과는 쉽게 예상할 수 있듯이
Quote:
a = 1
이 나왔습니다.
그런데, SUN에서 CC를 이용하여 빌드했더니 결과가
Quote:
a = 0
이 나오더군요.
이건 컴파일러 버그가 아닐까요?
아니면 위의 코드는 OS또는 Compiler에 따라 변할 수 있는 코드일까요?
의견을 말씀해주세요.
다음은 각 시스템에서 테스트한 결과입니다.
Quote:
int a = 0;
a = a++;결과
SUN (CC) : 0
HP (aCC): 0
IBM (xlC): 0
SUSE(g++): 1
Win32(VC): 1
Forums:
코드가 잘못된 것입니다. 인접한 두 sequence point 사이에서
코드가 잘못된 것입니다. 인접한 두 sequence point 사이에서 동일한 개체를
두 번 이상 변경한 결과는 정의되지 않습니다.
좀 더 자세히 설명해주세요.
doldori
위 문장을 잘 이해하지 못하겠네요. 대충 감은 오지만요.
일단 sequence point 라는 용어를 잘 모르겠습니다. ^^
좀 더 쉽게 설명해주시면 감사하겠습니다.
정말 깨끗하고 멋진 프로그램을 짜고 싶습니다.
[답변검색완료] 답변 입니다.
이미 제가 올린 질문에 대한 주제는 많이 논의된 주제였더군요.
혹시라도 제 질문을 보시고 저와 동일한 의문을 가지셨다면
다음 링크를 참고해주세요.
1) http://online-judge.uva.es/board/viewtopic.php?t=5268
2) http://c-faq.com/expr/evalorder2.html
정말 깨끗하고 멋진 프로그램을 짜고 싶습니다.
간단히 풀어보시면 아실 수 있을 문제...
a=a++; 에서
a++; 과 a=a+1; 은 동치입니다.
따라서 a=a=a+1; 이란 셈이죠.
이렇게도 안될터이니 한 번 해보세용.
Re: [질문] UNIX에서 a = a++ ; 의 문제점?
b = a++는 b = a; a = a + 1;와 같은 의미입니다.
컴파일러에 따라서 아래와 같이 다르게 처리하지 않았나 추측해봅니다.
a = a++;
1)
2)
내 블로그: http://unipro.tistory.com
Re: [질문] UNIX에서 a = a++ ; 의 문제점?
이 부분은 a 에 대해 아무짓도 안하는 것과 같기 때문에, 불필요 코드라 판단하여 아예 제거해버렸을 것 같습니다.
Orion Project : http://orionids.org
댓글 달기