내용 참고
YES C (정보공학연구소/생능출판사)
혼자 연구하는 C/C++ (SoEn.kr /와우북스)
Microsoft Docs (구 MSDN)
문장과 제어구조
Ⅰ. 문장(Statement), 수식(Expression), 블록(Block)
ⅰ. Statement(문장 or 문)
■ 꼭 C언어가 아니더라도 대부분의 프로그래밍 언어는 한 문장(Statement)씩 실행된다.
■ 프로그래밍 언어에서 문장(Statement)이란 독립적으로 실행가능한 최소한의 코드 조각을 의미한다.
■ C언어의 문장은 대부분 ;(세미콜론)으로 끝나지만 키워드로 시작되는 제어문 등은 ;(세미콜론)으로 끝나지 않는 경우도 있다.
ⅱ. Expression(수식 or 식)
■ 수식은 상수와 변수, 연산자 등의 조합으로 그 결과 하나의 값으로 평가될 수 있는 문장을 의미한다.
ⅲ. Block(블록 or 복문)
■ 기본적으로 제어문이 적용되는 논리적 구조는 제어문에 따라오는 하나의 목표문이다.
■ 그렇기 때문에 하나의 제어문이 여러 개의 문장에 적용되게 하려면 여러 개의 문장을 하나의 문장처럼 묶어줄 필요가 있다.
■ C언어에서는 여러개의 문장을 하나의 문장으로 묶을 때 {}(중괄호)를 사용한다.
■ 또한 이렇게 묶인 문장을 코드 블록(code block) 혹은 복문(compound statement)라고 부른다.
Ⅱ. 프로그래밍 언어의 조건
ⅰ. 보편 튜링 머신
■ '튜링 머신'이란 '행동표'에 따라 '상태기록기'와 '헤드'를 이용해서 '테이프'의 임의 위치의 정보를 바꿀 수 있는 기계를 의미한다.
■ '상태기록기'는 튜링 머신의 현재 상태를 저장하고 있는 장치이며, '테이프'는 정보를 저장할 수 있는 공간들이다.
■ '행동표'란 튜링 머신의 '현재 상태'와 헤드가 가리키고 있는 테이프의 현재 정보에 따라 튜링머신이 수행할 행동을 기록해둔 표이다.
■ 즉, 이 행동표만보면 임의의 튜링 머신이 어떻게 작동할지 알 수 있다.
■ '보편 튜링 머신'이란 임의의 튜링 머신의 행동표를 보고 임의의 튜링 머신을 흉내낼 수 있는 튜링 머신을 의미한다.
■ 이는 앨런 튜닝이 상상한 가상의 기계였으나 이후 폰 노이만에 의해서 현대의 컴퓨터의 원형이 되었다.
ⅱ. 현대의 컴퓨터와 보편 튜링 머신의 관계
■ 현대의 컴퓨터에서 '헤드'는 'CPU'로, '행동표'는 '프로그램'으로, '테이프'는 '메모리'라고 이해할 수 있다.
■ 현대의 컴퓨터와 가상의 기계인 보편 튜링 머신은 기본적으로 2가지 차이점이 존재한다.
■ 첫번째는 보편 튜링 머신에서 가정한 테이프의 길이는 무한하지만 현대의 컴퓨터의 메모리는 유한하다는 것이다.
■ 이 점 때문에 현대의 컴퓨터는 '튜링 완전하다'고 하지 않고, '느슨하게 튜링 완전하다'라고 한다.
■ 두번째는 튜링 머신은 상태에 따라서 헤드가 움직이지만, 컴퓨터는 제어 구조에 따라서 움직인다는 것이다.
ⅲ. 튜링 완전성과 프로그래밍 언어의 관계
■ '튜링 완전하다'는 것은 튜닝 머신과 동치임을 의미한다.
■ 현대의 컴퓨터는 메모리가 유한하기 때문에 느슨하게 튜닝 완전하다.
■ 프로그래밍을 한다는 것은 임의의 튜링 머신을 만든다는 것과 같은 의미이다.
■ 그러므로 프로그래밍 언어는 '(느슨한) 튜링 완전성'을 가져야 한다.
■ 프로그래밍 언어가 '(느슨한) 튜링 완전성'을 갖기 위해서는 기본적으로 다음의 두가지 조건이 충족되어야 한다.
■ '1. 임의의 위치에 있는 메모리의 값을 바꿀 수 있어야 한다.' , '2. 조건분기문이 있어야 한다.'
■ 1번 조건은 테이프의 정보를 바꿀 수 있다는 것을 의미하며, 2번 조건은 상태에 따라서 다르게 행동함을 의미한다.
■ 참고로 HTML등의 마크업 언어는 이 두가지 조건을 충족하지 못하기 때문에 프로그래밍 언어로 분류되지 않는다.
Ⅲ. 제어 구조의 종류
ⅰ. Selection-Statement (= Alternative-Statement / 조건문, 택일문)
■ 이어지는 수식의 결과가 참인가 거짓인가에 따라서 목표 문장의 실행 여부가 결정되는 문장을 말한다.
■ 대표적으로 if문이 해당되고, switch문도 포함된다.
ⅱ. Iteration-Statement (반복문)
■ 이어지는 수식의 결과가 거짓이 될 때까지 목표 문장을 반복 실행하는 문장을 말한다.
■ 대표적으로 while문이 해당되고, for문도 포함된다.
ⅲ. Branching-Statement ( = jump-statement / 분기문)
■ 조건에 상관없이 지정된 위치로 강제적으로 이동시키는 문장을 말한다.
■ 대표적으로 goto문이 해당되고, break문, contineu문, return문도 포함된다.