ahdzl126   2년 전

C에서

tmp=c

a > b ? c=a,a=tmp : a=b,b=tmp;

이렇게 짜면 warning 이 뜨는데 그냥 if문을 써야 할까요?

sait2000   2년 전

삼항연산자보다 if 문을 쓰는 게 코드가 더 알아보기 쉽다고 여겨지기 때문에 warning이 나오는 것이라 혼자 문제 풀 때는 당장은 상관이 없습니다.

보통은 삼항연산자를 쓸 때 코드가 깔끔해지는 경우에만 쓰고 기본적으로는 if문을 쓴다고 생각하면 좋을 것 같습니다.

ahdzl126   2년 전

혹시 그럼 

a > b ? c=a,a=tmp : a=b,b=tmp;

이 구문은 문제가 없는건가요?

sait2000   2년 전

의도한 사항이 a가 b보다 클 때에 a와 c를 바꾸고 아니면 a와 b를 바꾸는 거라면 잘못 동작할 것 같네요.

ahdzl126   2년 전

아 잘못적었네요

a > b ? c=a,a=tmp : c=b,b=tmp;

error: lvalue required as left operand of assignment|

이런 오류와 함께 컴파일이 안되네요 알맞게 하는건 if 문뿐인가요?

djm03178   2년 전

괄호를 잘 치면 됩니다. C에서는 삼항 연산자가 대입 연산자보다 우선순위가 높기 때문에 이렇게 쓰면 아마도 (a > b ? c=a,a=tmp : c)=b,b=tmp;와 같이 묶일 듯 합니다.

djm03178   2년 전

이런 식으로 연산 의도가 한 눈에도 잘 보이게끔 괄호를 잘 치는 습관을 들이는 것이 좋습니다.

ahdzl126   2년 전

우선순위 때문 인줄 여태 몰랐네요 감사합니다. 기초가 부족해서 이런 실수를 하네요

댓글을 작성하려면 로그인해야 합니다.