Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++에서 중괄호를 생략하면 왜 위험한가? 나쁜 습관으로 여겨지는 이유

C/C++에서 중괄호 생략이 나쁜 습관으로 여겨지는 이유

C/C++에서는 if-else 문이나 반복문(for, while 등) 뒤에 오는 중괄호({})를 생략할 수 있습니다. 하지만 중괄호를 생략하면 해당 블록에는 조건문 또는 반복문 바로 다음의 한 문장만 포함된다는 점에 유의해야 합니다. 예를 들어 살펴보겠습니다.

if(condition) {
    Line 1
    Line 2
}

if(condition)
Line 1
Line 2

첫 번째 경우에는 Line 1과 Line 2가 모두 if 블록에 속합니다. 그러나 두 번째 경우에는 Line 1만 if 블록에 포함되고, Line 2는 if 블록과 전혀 관계없이 항상 실행됩니다. 즉, 중괄호를 생략해도 되는 경우는 조건문이나 반복문 아래에 단 하나의 문장만 존재할 때뿐입니다.

디버깅 중 발생할 수 있는 문제

개발 과정에서는 디버깅 목적으로 특정 코드 줄을 주석 처리하고 출력 결과의 변화를 확인하는 경우가 많습니다. 그런데 이때 중괄호가 없는 if-else 문이나 반복문은 예상치 못한 문제를 일으킬 수 있습니다.

if(condition) {
    Line 1
}
Line 2

if(condition)
Line 1
Line 2

위 두 경우 모두 Line 1은 if 블록에 속하지만 Line 2는 if 블록 밖에 있습니다. 따라서 조건이 참인지 거짓인지와 무관하게 Line 2는 항상 실행됩니다.

if(condition)
//Line 1
Line 2

그런데 위와 같이 디버깅을 위해 Line 1을 주석 처리하면 어떻게 될까요? 개발자는 "Line 1만 비활성화되었으니 문제없다"고 생각하기 쉽습니다. 하지만 실제로는 컴파일러가 Line 2를 if 블록의 일부로 해석합니다. 원래 의도와는 전혀 다른 동작이 발생하는 것입니다. 반면 처음부터 중괄호를 사용했다면 이런 문제는 애초에 발생하지 않습니다.

결론: 항상 중괄호를 명시적으로 작성하자

중괄호를 항상 명시적으로 작성하면 코드 가독성이 높아질 뿐만 아니라, 주석 처리나 코드 수정 과정에서 발생할 수 있는 논리 오류를 사전에 방지할 수 있습니다. 실제로 많은 코딩 표준에서 중괄호 사용을 권장하며, 최신 컴파일러들(GCC의 -Wmisleading-indentation 경고 등)도 이러한 위험한 패턴을 감지해 경고를 제공합니다. 사소해 보이는 이 습관 하나가 잠재적인 버그를 크게 줄여줄 수 있습니다.