리메이크 중/C,C++ 이론 중심

C(&C++) 이론 14. 제어구조 / 강제 분기문

라이피 (Lypi) 2023. 1. 4. 18:03
반응형

목록용 썸네일 이미지


내용 참고

YES C (정보공학연구소/생능출판사)

혼자 연구하는 C/C++ (SoEn.kr /와우북스)

Microsoft Docs (구 MSDN)


강제 분기문

■ 이 포스트에서는 조건문과 반복문 외에 프로그램의 흐름을 제어하는 분기문들을 알아본다.


Ⅰ. 강제 분기문(Jump Statement)

ⅰ. goto문

■ 구문 : goto identifier;

■ 같은 함수 내에 지정된 식별자로 표시된 labeled문으로 이동한다.

■ goto문은 같은 함수 내의 어떤 위치로든 조건없이 이동시켜주는 매우 강력한 명령어이다.

■ 이러한 강력함 때문에 goto문을 남용할 경우 코드의 가독성이 매우 떨어질 수 있다.

■ C언어와 같이 구조적 프로그래밍 언어에서는 goto문 사용을 지양하고 조건문이나 반복문 등으로 구조를 표현할 필요가 있다.

■ 현재 goto문은 중첩 반복문에서 빠져나올 때나 C언어에서 예외처리를 할 때 등 극히 제한된 경우에만 사용할 것이 권장되고 있다.


ⅱ. labeled문

■ 구문 : identifier : 

■ labeled문은 goto문의 짝이 되는 문법으로 goto문을 제외한 다른 문장들은 labeled문과 상관없이 실행된다.

■ 한 함수내에 동일한 식별자(identifier)를 갖는 labeled문이 두 개 이상 존재할 수 없다.

■ labeled문 ;(세미콜론)으로 끝나는 다른 문장 형식 앞에만 올 수 있으며, labeled문이 단독으로 필요한 경우에는 뒤에 null문이라도 배치해야한다.

■ 하지만 labeled문의 식별자는 변수명 등과는 다른 namespace를 갖기 때문에 권장되지는 않지만 아래와 같은 코드가 가능하다.

#include <iostream>
using namespace std;

int main() {
	int out = 1;
    while(out) {
        out++;
        cout << out << endl;
        goto out;
    }
    
    out:
    
    return 0;
}

 

반응형

 

 


ⅲ. return문

■ 구문 : return expression;

■ return문은 함수의 반환값에 따라 expression값을 반환하며 현재 실행중인 함수를 호출한 지점으로 빠져나가는 제어문이다.

■ 함수의 반환값이 void일 경우 expression은 생략된다.


ⅳ. break문

■ 구문 : break; 

■ break;문은 반복문이나 스위치 문안에서만 사용되며, 그 외의 구문에서 사용될 경우 에러로 처리된다.

■ break;문의 역할은 break;문을 포함하는 반복문이나 스위치문 밖으로 빠져나오는 것이다.

■ break;문은 break;문을 포함하고 있는 하나의 반복문이나 스위치문에서만 빠져나올 수 있다. 

■ 그러므로 중첩 구조에서는 break;문이 아닌 goto;문이나 return;문을 사용하여 빠져나오는게 더 효율적일 수 있다.


ⅴ. continue문

■ 구문 : continue;

■ continue;문은 반복문 안에서만 사용되며, 그외의 구문에서 사용될 경우 에러로 처리된다.

■ continue;문의 역할은 continue;문을 포함하는 반복문 내의 다음 문장들을 실행하지 않고 반복문의 처음으로 되돌아가는 것이다.


 

반응형