우선 C 언어를 알기 전에 프로그래밍 언어를 알아야 한다. 프로그래밍 언어는 컴퓨터 시스템을 동작시키는 프로그램을 작성하기 위한 언어이다.
컴퓨터 시스템은 스스로 인식할 수 있는 명령어들로 이루어진 프로그램에 의해 동작된다. 프로그래밍 언어란 이러한 프로그램을 작성하기 위한 인공적인 언어이다.
또한 프로그래밍 언어는 사람이 얼마나 사용하기 편리한가에 따라 고급 언어와 저급 언어로 나뉜다.
고급 언어 : C, C++, Java 등 대부분의 언어
고급 언어란, 사람이 이해하기 쉬운 언어를 말하며. Java의 경우 Write Once, Run Anyware (한번 코딩, 어느 플랫폼에서나 실행)를 지원하며
다른 고급 언어도 기본적인 문법은 비슷하고 플랫폼에 따라 조금씩만 수정하면 된다.
저급 언어 : 어셈블리어, 기계어
저급 언어란, 사람이 이해하기 어려운 다시 말하면 컴퓨터가 이해하기 쉬운 언어를 말한다. CPU/기계 의존도가 심하며 플랫폼마다 코딩을 일일이 해줘야 한다.
특히 고급 언어로 5줄 정도면 끝나는 코딩을 저급 언어로 짜면 20줄이 넘게 나오기도 하기 때문에 비효율적이다.
이제 다시 C언어로 돌아와 보자. C 언어란 데니스 리치라는 사람에 의해 개발되었다. B언어를 좀 더 업그레이드한 개념이다. C 언어는 고급언어로 분류를 하긴
하지만 정확히는 중급 언어라고 한다. 고급언어와 저급언어 사이에 위치에 있어 대부부의 기능을 지원하기 때문이다. 간단한 프로그램부터 드라이버를 기록하는데까지
응용 분야가 상당히 넓은 언어이다.
C 언어를 배우기 전에 아주 기본적인 형태의 프로그램을 살펴보자.
* 왼쪽의 숫자는 해당 라인이 몇 번째 라인인지 나타내기 위한 것으로 자동으로 생성되는 부분이다.
* 예전에는 C 언어를 코딩(작성) 하다 보면 모든 글자가 검은색 (위의 사진에서는 바탕이 검은색이기 때문에 흰색/회색)으로 나타났다.
문제는 코딩이 길어질 때 글자색이 같으면 가독성이 떨어지기 때문에 현존하는 대부분의 에디터들은 위와 같이 색 기능을 제공한다.
(색을 보고 어떤 색은 문자열, 어떤 색은 메타 문자, 어떤 색은 데이터타입을 대강 알 수 있음)
위의 사진을 보면서 C 언어의 구조를 하나씩 살펴보자. 함수의 구조는 다음과 같은데, 중괄호 '{' 와 '}' 사이에 해당 함수가 실행할 문장들을 기술한다.
반환값의_데이터_타입 함수_이름()
{
해당 함수가 실행할 문장들
}
즉, 위의 사진에서는 int가 반환값의 데이터 타입이며 함수 이름은 main이다.
main 함수가 실행할 문장은 printf("Hello World\n"), return 0 가 된다.
위 사진처럼 C언어는 반드시 하나의 main 함수가 있어야 하며, 그 어떠한 함수에 상관 없이 함수 안에 있는 문장 들은 위에서 아래 방향으로 실행된다.
따라서 위의 main 함수는 05행, 07행 문장이 실행된다.
마지막으로 주의해야 할 것은 C 언어는 헤더부분(#include <stdio.h>)과 함수의 시작과 끝('{','}')을 제외하면 반드시 문장뒤에 ';' 세미콜론이 들어가야 된다.
05행, 07행 문장 뒤에 ';'이 붙은것을 볼 수 있다. 세미콜론은 해당 문장의 끝을 나타내며 붙이지 않을 경우 컴파일 과정에서 오류가 발생된다.
다시 한번 사진을 보도록 하자.
05~07행을 보면 들여쓰기가 되어 있는 것을 알 수 있다. 이것은 해당 문장들이 main 함수 안에 속해 있다는 것을 나타내기 위한 것으로 들여 쓰기를 굳이 안 해도 프로그램을
실행하는데는 별 문제가 되지 않는다. 그러나 추후 프로그램의 유지보수를 위해 가급적 들여쓰기를 사용하는것이 일반화 되어 있다.
이제 역활을 살펴보도록 하자.
우선 05행, printf("Hello World\n")을 실행하면 화면에 Hello World 라는 문자열이 모니터에 출력된다.
이 문장은 printf 함수를 호출하는 문장으로, printf 함수에게 "Hello World"를 출력해달라고 요청하는 것이다.
즉, 위에서 printf 함수가 실행되려면 미리 해당 함수가 어딘가에 만들어져 있어야 한다. 무언가를 출력하는 함수는 굉장히 자주 사용되기 때문에 이러한 함수들을
미리 만들어놓고 제공하는데 그렇다고 해서 이런 함수들을 무작정 사용할 수는 없다. 즉, 프로그램에서 사용하고자 하는 함수를 제공하는 파일을 포함해야 하는데
이것이 바로 헤더 파일이다.
위의 프로그램에서 바로 01행, #include <stdio.h> 문장이 바로 stdio라는 헤더파일(확장자 => .h)을 미리 호출하는 것이다.
단, 위에서 설명했듯이 일반적인 문장과 달리 끝에 ';' 붙지 않는다.
* stdio 란 Standard Input Output의 약자로 표준 입출력을 말한다. 표준 입력은 키보드를 의미하며 표준 출력은 모니터를 의미한다.
이제 07행, return 0;를 살펴보자. 해당 문장은 0을 반환하면서 main 함수의 종료를 알리는 문장이다. C언어는 일반적으로 main 함수가 종료되면 프로그램의 실행이 종료된다.
위의 프로그램에서는 반환하는 값이 0, 즉 정수 데이터 타입에 해당 되기 때문에 미리 반환하는 값이 정수임을 알려주는 부분이 03행의 int main() 부분이다.
프로그램 실행 화면은 다음과 같다.
* 아는 사람은 알겠지만 본인은 C언어를 리눅스에서 코딩하고 실행하고 있는 중이다.
모르는 사람을 위해 설명하자면 01행에서 [root@AnonGhost c] # 이 부분은 리눅스에서의 shell로 윈도우의 명령 프롬프트와 비슷한 형태이다.
./022 부분은 022라는 프로그램을 실행하라는 의미이다. 즉, 본인은 프로그램의 소스를 022.c로 저장하고 컴파일 하였기 때문에 022 파일이 생성된 것이다.
결국, 02행 부분이 프로그램 실행 시 실제적으로 나타나는 화면이다.
비슷하지만 몇가지가 추가된 형태의 다른 프로그램을 보도록 하자.
우선 주석을 살펴보자. 프로그램을 코딩하다 보면 해당 부분이 어떤것인지 설명을 쓰는것이 바람직한데, 이런 설명을 주석이라고 한다.
주석에는 어떤 내용이 들어가도 프로그램 실행에는 영향을 주지 않는다. C 언어의 주석을 처리 하는 방법은 2가지가 있는데 /* 주석 내용 */ 방법과 // 방법이 있다.
/* 주석 내용 */ 방법의 장점은 주석이 여러줄로 이루어 졌을 때 사용하기 편하다는 건데, 아래와 같은 상황이 바로 이런 상황이다.
#include <stdio.h>
/* 이 프로그램은 C언어의 기본적인 형태이며,
이 프로그램에서 주석과 개행 문자를 배울것입니다 */
int main()
{
printf("안녕\n"0;
return 0;
{
위의 상황처럼 주석이 여러줄로 이루어져 있을 때는 /* 과 */ 안에 몇줄이 들어가던 상관이 없기 때문에 편리하다는 것이다.
자 다시 프로그램을 보면,
위의 프로그램은 주석을 // 를 이용한 방법을 사용했는데, 이 사용법의 장점은 끝에 추가로 삽입해야할 부분이 없다는 것이다.
즉, //주석입니다 여러분, 끝에는 아무것도 없네요 처럼 시작 부분에만 // 를 넣어주면 되기 때문에 비교적 간단하다.
주석 이외에 알아야할 것은 개행 문자인데, 05~06행을 보면 끝 부분에 보라색으로 '\n' 와 같은 형태가 있는 것을 볼 수 있다.
* 사진에서는 역슬래시n 으로 나타났지만 글에서는 원표시n 으로 나타나있다. 즉, 이것은 표기 방법의 차이기 때문에 역슬래시던, 원표시던 큰 상관은 없다.
'\n' 문자는 바로 개행 문자로 다음 줄로 넘기기 위한 것이다. 아래 사진을 보면 이해가 쉬울 것이다.
만약 개행 문자를 사용하지 않으면 "Hello WorldHello C언어" 처럼 출력될 것이다. 위 문장을 줄이는 방법도 존재하는데 바로 다음과 같다.
05~07행은 각각 한줄씩 총 3줄로 코딩하며 끝 부분에 개행 문자를 넣어주었으나,
11행은 총 1줄 자체로 코딩한 형태이다. 물론 출력 결과는 아래의 사진처럼 큰 차이가 없다.
다만 가독성을 위해서는 11행 방법보다는 05~07행 방법이 권장된다.
'Developing > C 언어' 카테고리의 다른 글
[C언어 강의 - 06] 대입, 증가/감소 연산자 (0) | 2014.05.07 |
---|---|
[C언어 강의 - 05] 산술 연산자 (0) | 2014.05.07 |
[C언어 강의 - 04] 데이터 타입 (0) | 2014.04.29 |
[C언어 강의 - 03] 표준 입출력 (함수) (0) | 2014.04.29 |
[C언어 강의 - 02] 상수와 변수 (0) | 2014.04.29 |