이 문제를 풀다가 소스 코드 상 67~68번째 줄을 "cout << max(dfs(1), mn);"이라고 썼다가 틀렸습니다.

제가 알기로는 함수의 인자는 앞에서부터 순서대로 결정되는 것으로 알고 있습니다. 

예를 들어 위의 예시에서는 dfs(1)의 결과가 나올 때까지는 mn의 값을 보지 않는 것처럼 말이죠.

단적으로 제 컴파일러에서는 cout << max(mn, dfs(1)); 이라고 하면 결과에 맞지 않았습니다.

그런데 왜 여기에서는 순서를 dfs(1), mn로 두어도 틀리게 나오는지 궁금합니다.

shg9411   3년 전

max 호출 당시에 값이 인자로 dfs(1)과 mn(=0)이 넘어가고, dfs(1)의 결과와 0의 max 값을 반환하여 틀립니다.

67~ 68줄을 주석처리하고 69줄을 이용하여 예시를 실행했을 때 결과가 45 입니다.

dfs(1) 결과가 28인가 했으므로 반드시 mn이 45가 되어야 합니다.

즉, dfs(1)이라는 함수가 완전히 동작한 후 dfs 내부에서 mn이 완전히 결정되었고, 그 후에 mn이 인자로 넘어갔다는 걸 의미합니다.


제가 알기로는 이게 정상적인 동작 원리로 알고 있는데 Wrong Answer를 받는 이유는 무엇일까요?

shg9411   3년 전

https://ideone.com/yKK5f8

28이 출력됩니다.

https://stackoverflow.com/questions/2934904/order-of-evaluation-in-c-function-parameters


제가 잘못알고 있었습니다. 함수 인자에 대한 호출 순서는 비표준이라 컴파일러마다 다르게 작동하기 때문에 위처럼 작성하는건 지양해야 하는 듯 합니다.

감사합니다!


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