printf c언어

bommy의 이미지

printf()함수에 관하여 사소한 궁금한 점이 생겨 질문 올립니다!

printf("%d", z=x+y)의 식이 존재할 때, 결국에 z의 값을 출력하게 되는데, z=x+y식에서 우선순위가 가장 낮기 때문에, z가 마지막에 남아 출력되는 것일까요?

익명 사용자의 이미지

Quote:
printf("%d", z=x+y)의 식이 존재할 때, 결국에 z의 값을 출력하게 되는데

네.

Quote:
z=x+y식에서 우선순위가 가장 낮기 때문에

맞습니다.

Quote:
z가 마지막에 남아 출력되는 것일까요?

조금 미묘하군요. 아 다르고 어 다르다는 말이 있지요.

대입 연산자는 항상 좌측 피연산자에 쓰인 값으로 평가됩니다.
즉 z가 남는 게 아니라, z에 쓰였던 값이 남는 겁니다.

bommy의 이미지

"항상 좌측 피연산자에 쓰인 값으로 평가됩니다."

그렇다면, z=x+y && x 등의 식에서 좌측은 z의 값으로 평가되기에 z가 1이라면(좌측이) 참으로 판단하고,
0이라면 거짓으로 판단하는 것인가요??

익명 사용자의 이미지

최종적으로 z에 쓰이는 값이 전체 표현식, 즉 대입 연산의 결과가 되는 거지요.

bommy의 이미지

!!

유동의 이미지

저렇게 코드를 안 짜면 됩니다.

z=x+y
printf("%d", z)

printf("%d", x+y)

둘 중에 하나 선택하시고 저런 코드는 짜지 마세요.