컴파일러
위의 코드에 상수 전파와 상수 폴딩을 반복해서 적용하면 최종적으로 어떤 코드가 되는가?
int n = 8;
int m = n * 2;
return m + 1;
- Areturn n * 2 + 1;
- Breturn 8 * 2 + m;
- Creturn 17;
정답과 해설 보기
정답: C. return 17;
상수 전파에서는 n에 8이 들어간 뒤 변경되지 않으므로 n을 사용하는 곳을 8로 치환하여 m = 8 * 2로 합니다. 상수 폴딩으로 8 * 2를 16으로 계산하면 m = 16이 되고, 다시 전파와 폴딩으로 m + 1은 16 + 1 = 17이 됩니다. n과 m의 대입은 사용되지 않게 되므로 불필요한 코드로 삭제되어 return 17;만 남습니다. 도중에 멈춘 형태나 치환을 잘못한 형태는 최종 결과가 아닙니다.
- A. n이 아직 남아 있어 전파가 끝나지 않았습니다.
- B. 치환이 잘못되었고 계산도 끝나지 않았습니다.
- C. 올바릅니다. 8 → 16 → 17로 계산이 진행되어 상수만 남습니다.