이렇게 정의되어 있는 매크로 함수라고 알고 있었는데요.
문제를 풀다가 max함수 안에 함수를 넣어보게 되는 일이 생겼습니다.
예를 들어보겠습니다. max(f(1), f(2))
이 f이라는 함수안에는 어떤 문자열을 화면으로 출력하고
정수를 리턴하는 함수라고 가정하면
매크로 함수로 예를 들자면,
(((f(1)) > (f(2))) ? (f(3)) : (f(4)))
이렇게 입력될 거란 말이죠.
그렇다면 우선 앞에 비교를 위해 f(1)을 실행해서 리턴값을 받고
f(2)를 실행해서 리턴값을 받아서 비교를 하게 되겠죠.
그렇다면 그 어떤 문자열은 화면에 총 두번 출력 될거구요.
그 다음 비교가 끝난 다음 그 평가결과에 따라 f(3)이나 f(4)를 호출하겠고
그 리턴값이 최종적으로 평가가 될것입니다.
문자열은 한번더 출력되어 최종적으로 3번 출력될것입니다.
제 경우는 이렇습니다.
(((f(1)) > (f(2))) ? (f(1)) : (f(2)))
위와 똑같은 원리로 문자열은 총 3번 출력되어야 할듯합니다만
이상하게 예상을 벗어나 문자열은 2번 밖에 출력되지 않았습니다.
f함수가 내부적으로 복잡한 계산을 거친다면 분명 이 삼항연산자에서
마지막의 평가값을 위해 한번더 함수를 호출하는 것은 불필요한 계산량을
늘리는 일이겠니 하고 다른 방법을 써야하나 생각했었는데, 예상밖으로
함수는 두번밖에 호출되지 않았습니다.
어떻게 된건걸까요? 언어는 c++를 사용했는데 혹시 c때와는 달리 max함수가
업그레이드 된건가요?
자세히는 저 f라는 함수가 재귀함수였었습니다.
재귀함수가 이 max함수안에 각각 인수로 들어간 경우였습니다.
제가 놓친 부분이 있을까요?
hunee
안녕하세요.
죄송합니다. 몇번 실험을 해봤는데
또, 이렇게 질문글을 쓰게 됩니다.
간단히 max함수에 대해서 인데요.
제가 알기로는 max함수는
// #define max(a, b) (((a)>(b))?(a):(b))
이렇게 정의되어 있는 매크로 함수라고 알고 있었는데요.
문제를 풀다가 max함수 안에 함수를 넣어보게 되는 일이 생겼습니다.
예를 들어보겠습니다. max(f(1), f(2))
이 f이라는 함수안에는 어떤 문자열을 화면으로 출력하고
정수를 리턴하는 함수라고 가정하면
매크로 함수로 예를 들자면,
(((f(1)) > (f(2))) ? (f(3)) : (f(4)))
이렇게 입력될 거란 말이죠.
그렇다면 우선 앞에 비교를 위해 f(1)을 실행해서 리턴값을 받고
f(2)를 실행해서 리턴값을 받아서 비교를 하게 되겠죠.
그렇다면 그 어떤 문자열은 화면에 총 두번 출력 될거구요.
그 다음 비교가 끝난 다음 그 평가결과에 따라 f(3)이나 f(4)를 호출하겠고
그 리턴값이 최종적으로 평가가 될것입니다.
문자열은 한번더 출력되어 최종적으로 3번 출력될것입니다.
제 경우는 이렇습니다.
(((f(1)) > (f(2))) ? (f(1)) : (f(2)))
위와 똑같은 원리로 문자열은 총 3번 출력되어야 할듯합니다만
이상하게 예상을 벗어나 문자열은 2번 밖에 출력되지 않았습니다.
f함수가 내부적으로 복잡한 계산을 거친다면 분명 이 삼항연산자에서
마지막의 평가값을 위해 한번더 함수를 호출하는 것은 불필요한 계산량을
늘리는 일이겠니 하고 다른 방법을 써야하나 생각했었는데, 예상밖으로
함수는 두번밖에 호출되지 않았습니다.
어떻게 된건걸까요? 언어는 c++를 사용했는데 혹시 c때와는 달리 max함수가
업그레이드 된건가요?
자세히는 저 f라는 함수가 재귀함수였었습니다.
재귀함수가 이 max함수안에 각각 인수로 들어간 경우였습니다.
제가 놓친 부분이 있을까요?
감사합니다.
10년 전