C/기초부터 하는 C 강좌

C 강좌 0강 - C 언어란?

kim선달 2020. 11. 8. 00:06
Select Language


0. 서론

C++ 강좌를 작성 하고 있었는데.. 하다 보니까 이게 도저히 C 강좌를 먼저 쓰지 않으면 진행이 안 되겠더군요.
기본적인 자료구조나 함수, 포인터들은 C 에서 그대로 물려받다 보니, 해당 부분들을 따로 부연설명 하려니 그것도 너무 사이즈가 켜져서..

어차피 그런 부분들을 알면 C언어도 초급은 떼는 거나 마찬가지이니 그냥 C 강좌를 먼저 작성하는게 좋겠다고 생각이 드네요

 

프로그래밍을 처음 접하시거나, 다른 언어들을 접하시고 온 분들도 잘 이해할 수 있게 작성하는걸 목표로 잡았습니다.

본 강의에서는 C 언어의 기능이지만, 쓸일도 거의 없고 괜히 머리만 복잡해 지는 - 다차원 배열 포인터나 구조체의 비트필드 및 메모리 정렬 등 - 은 링크로 빼 놓았으니, 링크는 굳이 들어가 보시지 않으셔도 됩니다.

다만 C 언어의 밑바닥까지 원하시는 분들이라면 해당 부분을 꼭 보시는걸 추천드립니다.

 

요즘은 C++ 개발만 하고 있다 보니, 예전 내용들이 조금 가물가물 합니다.

틀린 부분이나 표현에 오해의 소지가 있는 부분들은 얼마든지 지적해 주세요!


1. C언어란?

원래 서론이 길고 이론이 나오면 노잼인 법입니다.

그래도 이것만은 알아야 어디가서 "언어가 뭔지도 모르네" 소리는 듣지 않으실 겁니다.

 

https://www.guru99.com/difference-compiler-vs-interpreter.html#:~:text=Compiler%20transforms%20code%20written%20in,while%20interpreted%20code%20runs%20slower.

 

세상에는 수많은 프로그래밍 언어들이 있습니다.

가장 밑바탕이 되는 어셈블리어(기계어)를 제외하면, 언어들은 실행 방식에 따라 위의 그림과 같이 2종류로 나눌 수 있습니다.

 

C언어는 첫번째 카테고리에 속하는 언어로, 컴파일러(Compiler)를 통해 소스 코드(원본 코드, 그러니까 여러분들이 실제로 타이핑 하시는 바로 그 코드입니다)를 통채로 기계어로 바꾸는 과정을 통해 최종적으로 실행할 수 있는 파일을 내놓게 됩니다.

Python 같은 인터프리터(Interpreter) 계열은, 코드가 실행 되어야 하는 시점에 도달해서야 소스코드 해석을 시작합니다.

같은 컴파일 방식이더라도, Java 같은 경우는 JIT(just-in-time) compiler 를 이용해 코드를 실행할 시점에서만 컴파일 하는 방식을 사용하기도 합니다.


 

정리하자면, C언어는

  1. 실행하기 전에 "컴파일" 하는 과정을 거쳐 소스코드를 기계어로 바꾸는 과정을 거친다(목적(object) 코드 등도 있지만, 여기선 다루지 않겠습니다)

  2. (잘못된 타입 변환 혹은 오타 등) 문법 오류가 나면 애초에 "컴파일" 단계에서 에러가 난다.

    1. "컴파일" 단계의 에러를 컴파일 에러(compile error) 라고 부른다.

    2. 컴파일은 성공 했지만, 프로그램 실행 중에 에러가 나면 런타임 에러(runtime error) 라고 부른다

    3. 후자가 더 안좋은(?) 에러다. 왜냐하면 어디서 에러가 났는지 일일이 찾아야 하므로..

      1. 다시 말하면 컴파일 에러는 에러 위치를 알려준다. 다만 가끔씩 이상한 곳을 가르킬 때가 있다..

  3. "컴파일" 해 주는 "컴파일러"는 운영체제 마다 다르다.

  4. 그래서 컴파일러들은 공통적인 표준을 준수하게 작성이 되어 있다. (해당 표준은 ISO에서 관리한다)

  5. (가장 중요)그래서 C, C++ 을 하는 사람에게 비표준적인 코드를 보여 주면 매우 흥분하게 되니 조심해야 한다

C, C++ 은 프로그래머가 매우 저 수준(low level, 모든것을 일일이 명시하는) 까지 다루어야 하므로, 비표준적인 코드를 작성하면, 예기치 않은 동작(undefined behavior, 줄여서 ub)을 발생시킬 수 있습니다.

예기치 않은 동작을 발생시킬 가능성이 있는 코드는, 보안상 취약점이기 때문에 매우 좋지 않습니다.

그래서 C, C++ 코드를 작성할 때는 표준과 권장 사항을 잘 준수해서 작성해야 합니다.

 

다음 강좌부터는 본격적인 C 언어 프로그래밍 강의를 시작하겠습니다.

 

 

다음 강좌 1강: 출력(printf)

 

 

 

댓글은 글쓴이에게 큰 힘이 됩니다!

'C > 기초부터 하는 C 강좌' 카테고리의 다른 글

C 강좌 1강 - 출력(printf)  (0) 2020.10.25