더북(TheBook)

if 문을 통해 분기하는 영역은 자신만의 스코프를 갖는다. 다음 문장은 오류를 범하고 있다.

if (x < 0.0)
    int absx = -x;
else
    int absx = x;
cout << "|x| is " << absx << "\n"; // 이미 absx는 스코프를 벗어났다.

위 코드에서 absx라는 이름의 변수를 두 번 정의했다. 서로 다른 스코프에 있으므로 충돌이 나지 않는다. 하지만 두 변수 모두 if 문이 끝난 뒤에는 스코프를 벗어나기 때문에 마지막 줄에서 absx에 접근하려고 하면 오류가 발생한다. 실제로 분기문에서 선언한 변수들은 해당 분기 안에서만 사용할 수 있다.

if 문의 각 분기는 하나의 단일문으로 이루어져 있다. 여러 작업을 수행하기 위해 카르다노의 해법처럼 중괄호를 사용할 수 있다.

double D = q * q / 4.0 + p * p * p / 27.0;
if (D > 0.0) {
    double z1 = ...;
    complex<double> z2 = ..., z3 = ...;
    ...
} else if (D == 0.0) {
    double z1 = ..., z2 = ..., z3 = ...;
    ...
} else {            // D < 0.0
    complex<double> z1 = ..., z2 = ..., z3 = ...;
    ...
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.