티스토리 뷰

C언어

C언어와 프로그램

블로그 강승 2021. 3. 10. 18:16

C언어와 프로그램

C언어와 프로그램에 대한 주제로 공부한 내용을 요약해보겠다. Do it! C언어 입문(저자:김성엽) 이란 책을 통해 공부했으며, 책의 카테고리를 바탕으로 필자가 이해한 내용을 요약하는 글이다. 내용이 궁금하거나 찾아야 할 내용이 있으면, 필자가 정리한 글을 다시 보면서 복습하기위해 작성했다. 바로 아래에서 글을 확인하도록 하자.

 

프로그램

프로그램이란 어떤 작업의 순서가 써진 작업 표라고 할 수 있다.
컴퓨터에서의 프로그램도 마찬가지로 작업의 순서를 한눈에 알아볼 수 있다.
프로그램은 보통 확장자가 .exe 인 파일이다.
이 파일을 실행 파일이라고 하고 컴퓨터가 이해할 수 있는 언어(기계어)로 만들어졌다.

 

프로그래밍 언어

컴퓨터 프로그램은 컴퓨터가 이해할 수 있는 기계어(0과 1)로 돼 있어야 하는데,
사람은 기계어(0과 1)로 말을 하기 힘들다.
따라서 이걸 번역해주는 존재가 필요한데 이를 컴파일러(Compiler)라고 부른다.
우리는 컴파일러가 번역할 수 있는 언어를 써야 하는데, 그것이 바로 프로그래밍 언어이다.
우리는 컴파일러와 약속한 문법을 꼭 지켜야한다.
약속한 문법을 지키지 않으면 컴파일러는 번역에 실패한다.

 

C언어의 탄생

예전엔 각 하드웨어마다 프로그래밍 언어를 짜야했는데, 매번 다시 짜기 힘들어서
1972년, 켐 톤슨과 데니스 리치가 개발한게 C언어이다.
켐 톰슨과 데니스 리치는 C언어를 90% 이상 사용해서 유닉스(UNIX)라는 운영체제를 만들었다.
유닉스는 다양한 하드웨어에서 동작할 수 있는 운영체제다.

 

C언어의 특징 4가지

1. C언어는 구조화된 언어이다.
유지보수 편리하고, 기존 프로그램에서 자신이 원하는 작업을 분리하기도 쉬워서 새로운 프로그램을 개발할때 재사용하기에도 좋다.

2. C언어는 이식성(Portability)이 높다.
C언어로 만든 프로그램은 다른 하드웨어 또는 운영체제로 가져갔을 때도 잘 작동한다.

3. C언어는 확장성이 좋고, 표현법이 다양해서 자기만의 표현법을 개발할 수 있다.
문법 구조나 표현법이 다양해서 자율성이 높다. 난이도가 높다고도 할 수 있는데 경력이 쌓이면 훨씬 쉽다고 할 수 있다.

4. C언어는 생산성이 높다.
프로그램 개발 속도가 빨라진다. 여기에서 개발 속도는 사용자들이 사용할때 만족스럽게 사용하는 정도까지 걸리는 시간도 포함이다. 프로그래머들의 개발 인프라가 커질수록 더욱더 개발 속도가 빨라진다.

 

프로그래밍 개념

1. 상수
수학을 생각해서 숫자라고만 생각했는데 프로그램에선 한정된 입력 대상을 상수라고 한다.
프로그래밍 언어에서 숫자 상수, 문자 상수, 문자열 상수로 나누어 표현한다.

2. 변수
컴퓨터는 입력한 값을 기억하고, 결과로 나온 값도 기억을 해야 하기 때문에 기억 공간이 필요하다.
이러한 기억 공간을 변수라고 한다.

3. 고급스러운 언어, 저급한 언어
사람들이 쓰는 언어와 비슷할수록 고급(HIgh-level) 언어이고 컴퓨터의 기계어와 비슷할수록 저급(Low-level) 언어이다.
C언어는 중간(Middle-level) 언어로 볼 수 있다.

 

C언어의 서술 형식

컴파일러(번역기)가 잘 이해할 수 있게 문법에 맞게 개발자는 프로그래밍 언어를 써야 한다.
프로그래밍 언어가 요구하는 문법을 나열하는 걸 서술(Statement) 형식이라고 한다.

 

C언어의 기본 서술 형식

단일 서술문(Single Statement)

단일 서술문은 논리적인 최소 명령 실행 단위임.
C 언어는 ;(세미콜론)으로 문장을 구분하기 때문에 한 줄에 여러 개의 서술문을 쓸 수 있음.

/*한줄로 이루어진 단일 서술문*/ 
x = x+1; 

/*두줄로 이루어진 단일 서술문*/ 
x = x +30; 

/*한 줄에 두 개의 단일 서술문을 사용*/ 
x = x+1; y=y+2;

 

복합 서술문(Compound Statement)

복합 서술문은 여러 단일 서술문을 {} 중괄호를 사용해 하나로 묶은 형태임.

{
   x=x+1;
   y=y+2;
}

위 코드는 단일 서술문 2개를 사용한 것이 아니라 복합 서술문 1개를 사용한 것임.
중괄호는 단일 서술문 뒤에 따라오는 ;(세미콜론)이 필요 없음. 왜냐하면 끝났다는 걸 {}가 구분해주기 때문임.
다만 중괄호 뒤에 ;을 써도 오류가 발생하지 않는 이유는 아무 의미 없는 단일 서술문이 중괄호와 세미콜론 사이에 있다고 생각하기 때문임.

 

역할에 따른 서술문

라벨 서술문

라벨 서술문(Labeld Statement)은 소스 파일의 특정 위치에 라벨을 지정하고 goto문을 사용해 그 위치로 이동할 수 있도록 작성한 서술문임.(a>10 이러한 조건이 되면 goto에 의해 EXIT;으로 이동함)

if(a>10) goto EXIT;
a=a+1;
EXIT;

 

분기 서술문

분기 서술문(Jump Statement)은 자신이 소속된 서술문을 벗어나거나 흐름을 바꾸어 놓을 때 사용한다.
return문, goto문처럼 실행 흐름을 마음대로 조정하는 게 아니라 특정 조건 서술문이나 반복 서술문 안에서만 적용됨.
(while이란 반복문에서 i>5란 조건이 성립하면 break 때문에 조건문을 빠져나옴)

while(1) {
if(i>5) break;
i++;
}

 

주석문

코드의 가독성이 좋아지는 역할을 함. /*로 시작해서 */ 까지 안에 있는 건 무조건 주석문임.
(컴파일러가 컴파일 안 하는 부분임)

 

예약어

프로그래밍 언어의 문법에 사용되는 단어들을 예약어(Reserved Word)라고 함.
예약어는 컴파일러와 약속된 단어이기 때문에 이름 짓는 문법에서 이 단어를 사용하면 오류가 발생한다.

 

소스파일, 목적파일, 실행파일 구상 이미지

 

소스파일(.c)

소스파일(Source File)은 프로그래머가 만들고 싶은 프로그램을 C 언어 문법을 사용해서 작성한 파일을 말한다.
확장자는 대게 .c를 쓴다. (C++는 .cpp, Java는 .java, C#은 .cs라는 파일 확장자를 사용함)

 

목적 파일(.obj)

목적 파일(Object File)은 컴파일러(번역기)가 소스 파일을 번역(컴파일)하면 만들어지는 파일임.

 

컴파일하고 바로 실행파일 안 만들고, 목적 파일 만드는 이유

소스,목적,실행파일 2번째 이미지

대량의 소스 파일을 하나로 만들었을때 변경되는게 있다면 전체를 다시 컴파일해서 목적파일을 다시 만듦.

소스,목적,실행파일 3번째 이미지

대량의 소스파일을 3개로 분할하면 변경된 부분이 일부분이면 그 소스파일만 컴파일해서 컴파일하는 속도가 빨라짐.

다시 풀어 써보자면,
소스파일에 1000줄이 있다고 해보자. 이중에 한 글자만 변경하면 새로 컴파일할 때 목적 파일은 완전히 새로 다시 만들게 된다.(조금만 변경해도 컴파일하는 시간이 오래 걸린다)

1000줄짜리 소스파일을 3분할 해서 만들었다 하면 그중에 한 글자만 변경하면 그 한 글자가 포함된 소스파일만 다시 컴파일하면 돼서, 컴파일 속도가 확실히 줄어든다.

실행파일(Executable File)은 컴퓨터에서 실행할 수 있는 파일이다. 더 이상의 컴파일 없이 바로 실행이 가능하며 확장자나 형식은 운영체제마다 다르다.

 

글을 마음대로 배포하셔도 되지만, 출처(링크)는 반드시 남겨주시기 바랍니다.

'C언어' 카테고리의 다른 글

C언어 지역 변수/전역 변수  (0) 2021.03.12
C언어 반복문/시프트 연산자/비트 연산자  (0) 2021.03.11
C언어 연산자/조건문  (0) 2021.03.11
C언어 함수/표준출력함수  (0) 2021.03.11
C언어 자료형/상수  (0) 2021.03.10
댓글