rhjung2001   2년 전

밑의 두 코드는 12줄과 53줄의 차이가 있습니다.

code1의 경우에는 d[i][j]=MAX(d[i+1][j]+array[i][j],d[i+1][j+1]+array[i][j]);처럼 array[i][j]를 MAX안에 넣었으며,

code2의 경우에는 d[i][j]=MAX(d[i+1][j],d[i+1][j+1])+array[i][j];와 같이 array[i][j]를 MAX 밖에 넣었습니다.

저는 미리 더하고 크기를 비교한 것과, 크기를 비교하고, 큰 숫자를 찾아 더하는 것. 두 경우의 차이점을 모르겠는데 code1의 경우에는 정답이고 code2의 경우에는 오답입니다. 왜 그런걸까요??

bupjae   2년 전

MAX 의 정의가 불완전하기 때문입니다.

매크로를 올바르게 사용하기 위해서는 각 인자를 () 로 감싸주어야 하며, 전체 식을 한 번 더 () 로 감싸주어야 합니다.

그럼에도 불구하고 매크로 인수에 side effect 가 발생하는 식 (예: ++a) 을 넣으면 전혀 엉뚱한 답을 낼 수 있습니다.

   

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