Limetime's TimeLine
article thumbnail
Published 2017. 8. 20. 19:21
C Language <1> C&C++
반응형

C Language <1>

C언어는 프로그래밍 언어이다.

컴퓨터와 사람은 서로 대화가 불가능하다.

왜? 당신은 한국어, 영어 등.. 이런언어를 쓰지만

그들은 0과 1로된 숫자의 규칙을 언어로 사용한다.

이걸 어찌 알아들을 수 있을까? (물론 미친 노력을 통해 가능하긴하단다. ㅎ )

그렇기 때문에 이 둘 사이의 통역가가 존재한다.

바로 컴파일러라는 녀석이다.

즉, 우리는 C언어라는 언어를 배워 C언어를 할줄아는 컴파일러에게 말을하면 컴파일러는 기계어로 번역해 컴퓨터에게 전달해준다.

(가끔, "그럼 컴파일러한테 한국어나 영어를 가르치자"라고 하는 분들은 생각을 조금 해봤으면 한다.)

즉, 프로그래밍 언어 : 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어.

컴파일러의 역할 : 프로그래밍 언어로 작성한 결과를 기계어로 번역 => 컴파일


C언어 : 1971년 UNIX개발을 위해 Dennis Ritchie (데니스 리치)와 Ken Thompson (켄 톰프슨)에 의해 설계된 고급언어(High-Level) 란다.

파란만장한 탄생 과정 : ALGOL 60 -> CPL -> BCPL -> B언어 -> C언어


고급 언어 ? 저급 언어도 있겠네?

"질이 낮은가? 쉬운가?" 

답은 NO

저급 언어(Low-Level)는 사람이 이해하기보다 컴퓨터가 이해하기 더 좋은 즉, 컴퓨터에 더 가까운 언어체계이기 때문에 많은 제약과 어려움이 공존.

=> 고급 언어인 C언어를 통해 더 인간이 이해하기 쉽게 소통할 수 있음.

* 고급 언어 : 인간 이해 쉬움, 저급 언어 : 컴퓨터 이해 쉬움


저급 언어에는 어셈블리(Assembly)라는 언어가 있는데, 나중에 리버스 엔지니어링(Reverse Enginnering)이라고 리버싱이라고 하는 기술을 배우면서 알게됨.

리버싱은 말그대로 역으로 프로그램을 뜯어 다시 언어(저급 언어 -> 디버깅 -> 고급 언어)로 변환시키는 역공학기술이다. 

(어셈블리를 이해하고 C언어로 다시 코드를 짠다.)

"겁나 암걸린다."

그럼 프로그래밍은 저급 언어 -> 컴파일 -> 고급 언어 이런 방식이겠지... 


<C언어의 특성>

ㆍ 절차 지향 특성 : 자바(java)와 같은 객체 지향 언어와 반대인데, 이 뜻에는 '정해진 순서의 실행흐름 중시'라는 의미가 있단다.

하다보면 그냥 알게될 것이다. (특별한 경우를 제외하고 그냥 쭉 읽어버리는 컴파일러의 모습을..)


ㆍ 이식성이 좋다. : 초기 언어들은 AMD와 인텔 중 하나에만 최적화되어있고, 다른 하나는 개(?)적화라서 이식성이 쓰레기(?)였다.

그런데, C언어는 CPU제약과 운영 체제에 부담을 덜 준다.


ㆍ C언어로 작성된 프로그램이 좋은 성능을 보인다.  : 사용하는 메모리 양이 다른 언어에 비해 적고, 속도 저하의 요소들을 최적화.

(물론 작성자가 어떻게 짰느냐 즉, 최적화를 잘 했느냐에 따라 달라지겠지만...)  


자! 그러면 우리가 작성 해봤던 HelloWorld!에 대한 이야기를 해보자.

처음인 분들은 "이게 왜? 이렇게 되지?"라고 생각해야 된다.

차근차근 보자.



이제 부터 컴파일러의 입장이되어 절차 지향적이게 위에서 부터 아래로 읽겠다.

#include : '~을 포함한다.'라는 의미라는건 include라는 영단어를 알면 모두 알겠지? 사실상 여기서는 '전처리 문'이라고 해서 제일먼저 처리된다.
<stdio.h> : 입ㆍ출력을 위해 사용되는 헤더 파일이다.  헤더 파일은 내가 쓸 함수를 담고있는 상자같은 녀석인데, 다양한 함수가 있는 만큼 다양한 헤더파일들이 있다. ex)stdlib.h

(<stdio.h> 파일의 경로(보통의 경우) : c:\program files(x86)\Microsoft visual stdio 10.0\VC\include)

main() : 기본 함수이고, 제일 메인이 되는 함수이다. 코드에서 하나만 사용 가능하고 제일 먼저 시작하며 프로그램의 시작과 끝이다.

void main() ,main(void) : 입력 받는 값도 없고, 출력하는 값 역시 없다. void는 '공허'라는 뜻이다.

main (void)의 경우 return 0;를 써줘야하지만, void main()의 경우 return 0;를 쓰지 않아도 된다.

뜻은 같다. (자세한건 나중에 알게될 것이다.)

return 0 (반환형) : main함수의 종료를 가르킨다. 값을 반환한다.

문자열 출력 (" "): 큰 따옴표로 묶어서 표현한다.

세미콜론(;) : 문장의 끝을 즉, 끝을 알린다.



반응형
profile

Limetime's TimeLine

@Limetime

포스팅이 좋았다면 "공감❤️" 또는 "구독👍🏻" 해주세요!