이 장에서는 프로그램 흐름을 제어하는 구조적 방법에 대해 설명한다.
NASA는 명확하고 일관된 제어 흐름을 가장 중요한 코딩 원칙 중 하나로 여긴다.
즉, 코드가 “읽히는 흐름”과 “실제 실행 흐름”이 동일해야 한다.
구조적 제어만 사용
goto 문은 절대 금지한다.if, else, for, while, do-while, switch 만 허용된다. goto 대신단일 입출력 원칙(Single-entry, single-exit)
break나 continue의 남용은 프로그램의 논리를 흐트러뜨린다.블록 사용의 명확성
{} 를 사용한다.if (x > 0) {
process(x);
}조건문 형태
if 문은 명확한 비교 연산자를 포함해야 한다. if (count == 0)if (flag) 같은 암시적 비교는 피한다.if (flag == TRUE) 형태로 명확히 작성한다.else-if 체인
if / else if / else 구조로 작성한다.if (value < 0) {
error();
} else if (value == 0) {
reset();
} else {
proceed();
}단락 평가(short-circuit evaluation) 주의
&&와 ||는 좌항이 평가된 후 필요 시에만 우항을 평가한다.형식
switch 문에는 항상 default 절이 포함되어야 한다. case 끝에는 break를 반드시 넣는다.switch (status) {
case READY:
start();
break;
case RUNNING:
monitor();
break;
default:
report_error();
break;
}fall-through 금지
case 간의 연결은 금지된다.break 없이 다음 case로 넘어가는 형태는 허용되지 않는다.)case 정렬
case 라벨은 모두 같은 들여쓰기 수준에 두고,형식
for 루프는 세 부분(초기화; 조건; 증감)을 모두 명시해야 한다. for (i = 0; i < limit; i++) {
...
}루프 제어 변수
무한 루프 금지
for(;;) 형태의 무한 루프는 허용되지 않는다.중첩 루프
조건 평가
while (index < MAX) while(1) 또는 while(TRUE) 형태의 무한 루프는 피한다.루프 내 제어
break, continue, return 사용을 최소화한다. do-while은 루프 본문이 최소 한 번 이상 실행되어야 하는 경우에만 사용한다. do {
read_input();
} while (input != END);break 사용
break 문을 사용하는 대신continue 사용
return을 사용할 수는 있지만,return 하는 대신,NASA의 제어 구조 규칙은
코드의 흐름을 예측 가능하고 안정적으로 유지하기 위한 것이다.
모든 제어문은 단일 입출력, 명확한 블록 구조, 일관된 들여쓰기를 원칙으로 한다.
번역을 하며 틀린 부분이 있을 수 있으니 유의해서 봐주시고,
잘못된 점이나 수정이 필요하다면 댓글로 부탁드립니다.원문: https://ntrs.nasa.gov/api/citations/19950022400/downloads/19950022400.pdf