for문 조건변화수식 질문
글쓴이: byflashh / 작성시간: 목, 2019/10/03 - 5:49오후
int sum = 0;
int num;
for(num=1; 5>=num; num++){
sum=sum+num;
}
printf("%d", sum);
여기서 조건변화수식인 num++을 ++num으로 써야하는거 아닌가요?
저 for문 돌아가는 순서가
num=1로 시작
num이 5보다 작거나 같으니 명령문 수행
sum=sum+num이니까
0=0+1
그다음 num++수행인데
여기서 num++은 수식 계산후 동작이지않습니까?
그러면 여기서 num++은 이제야 처음으로 동작하는것이니 num에 1이 한번더 들어간후 +1이 되야되는거 아닙니까?
Forums:
한번 돌려보시면 되지 않을까요? num++로도
한번 돌려보시면 되지 않을까요? num++로도 해보시고 ++num 으로도 해보시고요.
어떤 결과가 나오는가요?
논리적으로는 ++num 이 빠르다고 하는데, 컴파일러
논리적으로는 ++num 이 빠르다고 하는데, 컴파일러 최적화로 인해 같은 속도가 나온다고 하는군요.
Quote:여기서 num++은 수식 계산후
밑줄친 부분이 무슨 말인지 모르겠군요.
라스코니님 말씀대로, ++num을 넣으나 num++을 넣으나 똑같이 잘 동작하는 올바른 코드입니다. 직접 해보면 금방 알 수 있지요.
그리고 주어진 코드와 같은 맥락에서 ++num과 num++이 서로 다른 성능을 보이는지는 기초 프로그래밍 분야의 만년 떡밥입니다. 결론부터 말하면 int와 같은 primitive type에 대해서는 전혀 차이가 날 일이 없으니 신경안쓰셔도 됩니다.
말을 너무 이상하게 적었군요 댓글들 보면서 답을
말을 너무 이상하게 적었군요 댓글들 보면서 답을 얻었습니다
답변 감사합니다
oo
증감연산자, 즉 ++ 혹은 --는 단독으로 쓰일 때는 선행(++a), 후행(a++)이든 아무 의미가 없습니다.
for문 안은 ;(semicolon)으로 분리되어 있잖아요. 이것은 독립된 문장이라는 뜻입니다. 즉 num++은 독립된 하나의 문장이으로, ++num을 쓰든지 num++을 쓰든지 상관없습니다.
위의 코드를 다시 쓰면 아래와 같이 쓸 수 있을 것 같아요.
Quote:for문 안은 ;(semicolon)으로
음, 조금 애매하네요.
for-statement에서 괄호 안에 세 번째로 들어가는 expression은 expression-statement가 아니에요. 물론 수행되는 방식은 비슷합니다 (evaluated as a void expression). 그리고 바로 그렇기 때문에 ++num을 쓰든 num++을 쓰든 상관없다는 점도 맞습니다.
expression-statement의 끝에 들어가는 문자(;)와 for-statement에서 expression 사이에 들어가는 문자(;)가 같은 건 문법적인 soundness 및 consistency 측면에서 분명히 관련이 있다고 말할 수 있습니다. 하지만 이걸 인과관계라고 하기는 어려울 겁니다. 다른 근거가 없다면, 후자가 전자를 따라서 그렇게 정해졌다고 말할 수 있을지 모르겠네요.
oo
https://stackoverflow.com/questions/13421395/effect-of-semicolon-after-for-loop#13421435
해당 링크를 잘 읽어보셨다면, 질문자가 가리키는
해당 링크를 잘 읽어보셨다면, 질문자가 가리키는 세미콜론은 for-statement의 괄호 안에 있는 세미콜론이 아니라 for-statement의 loop body 자리에 들어가는 세미콜론을 가리킨다는 점을 알 수 있으실 겁니다.
그 자리는 statement가 들어갈 자리가 맞고, 거기에 세미콜론 하나만 찍어 놓으면 그건 expression-statement의 특수한 경우인 null statement입니다. 이 statement는 이름 그대로 아무 것도 안 하지요.
for-statement의 괄호 안에 있는 세미콜론(;)은 다른 이야기랍니다.
댓글 달기