C 언어에서는 if 문 내 단일 명령어에 대해 중괄호를 생략하는 것이 허용되었습니다. 이는 코드를 간결하게 만들었지만, 특히 코드의 확장 및 수정 시 많은 비직관적인 오류를 유발했습니다. 역사적 원인은 공간 절약과 미니멀한 경우에 대한 구문 단순성입니다.
문제는 개발자가 중괄호 없이 if 문이 그 뒤의 첫 번째 표현식만 제어한다는 것을 잊었을 때 발생합니다: 이후 모든 명령어는 조건과 상관없이 실행되며, 시각적으로는 비직관적일 수 있습니다. 이러한 스타일은 코드 읽기 시 발견하기 어려운 숨겨진 버그를 초래하고, 잊은 탭이나 새 줄 추가로 인한 오류로 이어질 수 있습니다.
해결 방법은 단일 명령어라도 항상 중괄호를 사용하는 것입니다. 이는 코드의 가독성과 안전성을 높입니다.
코드 예제:
// 나쁜 예: if (x > 0) do_something(); do_other(); // 항상 실행됨 // 더 좋은 예: if (x > 0) { do_something(); do_other(); }
주요 특징:
들여쓰기가 if의 범위에 영향을 미치나요?
아니요, C 언어에서는 범위가 중괄호에 의해 정의되며 들여쓰기는 영향을 미치지 않습니다.
이 코드의 동작은 무엇인가요?
if (a > 0) fun1(); fun2();
fun1()은 a > 0인 경우에만 호출됩니다. fun2()는 조건과 상관없이 항상 호출됩니다.
새 줄 추가 시 중괄호를 잊으면 어떤 결과가 발생하나요?
이 코드는 동작이 변경될 수 있으며, 시각적으로 발견하기 어려운 오류를 초래할 수 있습니다, 왜냐하면 들여쓰기가 컴파일 오류로부터 보호하지 않기 때문입니다.
개발자가 중괄호를 잊고 단일 if에 두 번째 명령어를 추가했습니다.
if (user) initialize(); log_access();
장점:
단점:
개발자가 항상 단일 명령어에도 중괄호를 사용합니다:
if (user) { initialize(); log_access(); }
장점:
단점: